目次
COBOL-S9の説明
今回は、COBOLで使用するデータ型の種類である、「S9」について解説します。
PIC S9とは
![PIC Sイメージ図](https://www.shakaijintanaka.com/wp-content/uploads/2023/03/PICS_SAM-1024x296.png)
PICTURE句 | 意味 |
---|---|
9 | 数字1桁 |
S | 符号付き |
V | 少数点 |
Z | ゼロサプレス(計算では使用することができない) |
, | カンマ(計算では使用することができない) |
X | 文字1文字 |
COBOLでは、変数を定義するときに、「9」や「X」を使用する。
「9」は数値型の変数、「X」は文字型の変数といった感じだ。
では「S」は何かというと、符号付きという意味になる。
「S9」とすると、符号付きの数値型変数になる。
以下は、指定した変数で表現できる数値である。「S」を使用することで、プラスマイナスを保持することが可能になる。
S9. => -9〜+9
S99. => -99〜+99
9. => 0〜9
99. => 0〜99
ちなみに、「S99.」は、「S9(2)」と表すことも可能である。
これは、「9」が2個あるということを表現している。
「S9999」は、「S9(4)」と表すことが可能。
コード例
IDENTIFICATION DIVISION.
PROGRAM-ID. PICNUM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM PIC 99.
01 SNUM PIC S99.
PROCEDURE DIVISION.
MAIN SECTION.
MOVE -1 TO NUM. => 01
MOVE -1 TO SNUM. => -01
STOP RUN.
符号付き数値型→符号なしの数値型へ代入
![minus to plus](https://www.shakaijintanaka.com/wp-content/uploads/2023/03/d77d9c8bc77474e96a1611494cbc2019-1024x203.png)
符号付きの数値型を、符号なしの数値型へ代入する際には注意が必要である。
マイナスの数値を符号なしの数値型へ代入してしまった場合、符号が保持されずプラスの数値に変更されてしまうからである。
下記で、簡単な例を見せる。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM PIC S99.
01 SNUM PIC 99.
PROCEDURE DIVISION.
MAIN SECTION.
MOVE -1 TO NUM. *> -01
DISPLAY NUM. *> -01
MOVE NUM TO SNUM.
DISPLAY SNUM. *> +01
上記のように、マイナスの数値を符号なしの数値型に代入し、それを符号ありの数値型したとしても、符号はプラスになってしまう。
符号ありの数値型と符号なしの数値型の使い分けに注意する必要がある。
「V」や「Z」や「,」の使用方法
続いて、「S9」とは話が逸れるが、「V」「Z」「,」についても解説していく。
「V」の使用方法
「V」は少数点を表すことができ、計算にも使用することができる。
例えば 「PIC 99V99.」は、少数第二位まで数値を保持することができるということだ。
1.1 => 9v9 => 1.1
10 => 99v9 => 10.0
10 => 99v99 => 10.00
100 => 999v999 => 100.000
以上のようになる。
「Z」の使用方法
「Z」は数値が入力されている場合は、数値を表示し。数値が入力されていない場合にはスペースを出力する。
また。計算には用いることができない点に注意が必要。
使用方法としては以下の通り。
10 => ZZ => 10
1 => ZZ => 1
150 => ZZ => 50
桁溢れした場合は、その部分はもちろん代入されずに切り捨てられてしまうので注意が必要。
「,」の使用方法
「,」は「,」を表すことができる。こちらも「Z」と同様に計算では用いることができない。
使用方法としては以下の通り。
10 => 9,9 => 1,0
100 => 9,999 => 100
1000 => 9,999 => 1,000
10000 => 9,9,9,9,9 => 1,0,0,0,0
このように、形式を整えたい場合などに使用する。
また、「100」の例のように、「,」より上の位に数値がない場合には「,」は表示されない点に注意。