変換される decimal 型の値が、正確に表現できる値の範囲内にある場合、その decimal 型の値は変更されません。
変換される decimal 型の値が、表現できる値の範囲外にある場合、decimal 型の値は切り捨てられます。 切り捨ては、整数部か小数部のいずれか、またはその両方で起こることがあります。
切り捨てが小数部で発生する場合は、
コンパイル時メッセージも実行時の例外も生成されません。
切り捨てが整数部で発生する場合は、コンパイル時メッセージか実行時の例外、またはその両方が次のように生成されます。
- 静的変数または外部変数の初期化において
- 整数部の中のゼロ以外の数字が切り捨てられた場合、コンパイル時エラー
- 自動変数、代入、またはプロトタイプによる関数呼び出しにおいて
- コンパイル時に警告が出る
- 実行時に整数部でゼロ以外の桁が切り捨てられる場合、ランタイム例外 SIGFPE
が発生することがあります。
注: 明示的なキャストを使用すると、コンパイル時メッセージおよび実行時の例外が抑止されます。 実行時の例外が発生するのは、先行するゼロ以外の数字が廃棄され、操作が明示的なキャスト操作でない場合です。
以下の例で、
メッセージ
とは、コンパイル時メッセージを表します。
例外
はランタイム例外を表します ( つまり、 SIGFPE
が発行されます ) 。
図 1 では、表示できない小数部の例を示しています。 ある 10 進数オブジェクトを、精度がもっと少ない別の 10 進オブジェクトに変換すると、小数点の右側が切り捨てられます。
図 2 は、表示されない整数部の例を示しています。ある 10 進オブジェクトを、桁数がもっと少ない別の 10 進オブジェクトに変換すると、小数点の左側が切り捨てられます。