数値の式
数値には、次のデータ型があります。
数値は、すべて値型として扱われます。これらの数値型は、格納できる値の範囲や使用するメモリ容量が異なります。
値型名 | 格納できる値の範囲 | ビット数 |
---|---|---|
整数 | -2,147,483,648~2,147,483,647 | 32 |
長整数 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 | 64 |
浮動小数 | 約7桁 | 32 |
倍浮動小数 | 約15~16桁 | 64 |
固定小数 | 約28~29桁 | 128 |
なお、これらの型をまとめて数値型と呼ぶことがあります。
数値定数
プログラムで具体的な数字(リテラル)を指定すると、プロデルが解析時にその数値を格納できる型に調整します。
数値は、全角、半角を問いません。負の数や小数点も表すこともできます。
なお、数値を文字列として扱いたい場合は、文字列として「 」で囲みます。
123を表示する
16進数定数表記
数値を16進数表記で指定するには、先頭に「0x」を付けて書きます。
0xFFを表示する
数値の変換
数値型の場合で、型が異なる変数に代入しようとすると、自動的に(暗黙的に)値の変換が行われます。
例文
次のプログラムでは、1.5が代入されている浮動小数である【値1】を、整数である【値2】へ代入しています。
【値1:浮動小数】は、1.5 【値2:整数】は、値1 値2を表示する
値1と値2は型が異なるため、値1を値2へ代入するときに、値変換が行われます。
具体的には、小数部分が切り捨てられて、1.5から1へ値変換されます。小数は四捨五入されません。
プロデルでは、変換前後の型に関係なく、すべて自動的に変換されます。
値変換の時に、変換前の値が、変換後の範囲に収まらない場合は、切り捨てられるか正しく変換されないことがあります。
変換後に切り捨される型は次の通りです。
整数へ | 長整数へ | 浮動小数へ | 倍浮動小数へ | 固定小数へ | |
---|---|---|---|---|---|
整数から | - | ○ | ○ | ○ | ○ |
長整数から | △ | - | △ | ○ | ○ |
浮動小数から | 切り捨て | 切り捨て | - | △ | ○ |
倍浮動小数から | 切り捨て | 切り捨て | △ | - | ○ |
固定小数から | 切り捨て | 切り捨て | △ | △ | - |
○=正しく変換されます △=変換後の範囲に収まる場合は正しく変換されます
切り捨て=小数が切り捨てられます
文字列との変換
数値型の値を文字列型の変数へ代入する時には、数値型が数字に変換されて文字列となります。
文字列型の値を数値型の変数へ代入する時には、文字列である数字が数値に変換されて数値型の値となります。
値変換の誤差
コンピュータの性質上、計算する際にわずかな計算誤差が生まれることがあります。
例えば、次のようなプログラムを実行すると、
本来は0.1と表示されるべきところが0.1000061と誤った結果になります。
295.5-295.4を表示する
この現象は、プロデルの不具合ではなく、小数点を含む数値をメモリ上に格納する際に起こります。
このようにほとんど等しい小数点以下の計算を正確に行いたい時は、計算誤差が生じる可能性が少ない、
固定小数型の変数に代入してから計算すると、誤差を回避できます。
【値1:固定小数】は、295.5 【値2:固定小数】は、295.4 値1-値2を表示する
なお、整数型ではこのような誤差は発生しないため、10倍した値を整数型として格納しておき、必要に応じて1/10にすると言った工夫も考えられます。