C/400

55. 大きな数字を C/400でどのように扱うか ?

C言語で数字を扱う場合には型によって扱える数字の範囲には制限がある。

System i でいうところの 10桁 数字程度しか扱うことができない。
オープン系の言語では驚くことにこのような意外な制約がある。
System i では昨日、入社したばかりの新入社員であっても

SURYO 15P0

のようにして 15桁の数字を簡単に定義することができる。
10桁程度ではビジネス用としては役に立たないのではないかと思われる。
例えば、

int suryo;
suryo = 123456789012;

とする演算はコンパイル・エラーになってしまう。
int の制限だけでなく、固定値としての 123456789012 そのものが
エラーなのである。
そこで System i 独自の型として PACK に相当する decimal という型が
提供されている。

#include <decimal.h> 
    :
decimal(18,0) integer;

のようにして 18桁小数0 の数字を定義しておいて

printf("integer = %D(18,0)\n", integer);

のようにして 正しく編集の上、表示することができる。
下記にその使用例を示す。

0001.00 #include <stdio.h>                         
0002.00 #include <stdlib.h>                        
0003.00 #include <string.h>                        
0004.00 #include <decimal.h>                       
0005.00                                            
0006.00 #define TRUE         0                     
0007.00 #define FALSE       -1                     
0008.00 void main(void){                           
0009.00   decimal(18,0) integer;                   
0010.00                                            
0011.00   printf("** TESTLONG **\n");              
0012.00   getchar();                               
0013.00   integer = 1234567890;                    
0014.00   integer = integer * 10 + 1;              
0015.00   integer = integer * 10 + 2;              
0016.00   integer = integer * 10 + 3;              
0017.00   integer = integer * 10 + 4;              
0018.00   printf("integer = %D(18,0)\n", integer); 
0019.00   getchar();                               
0020.00 }