数値型の18桁

18桁の数値項目のinputFieldに18桁入力した場合、outputFieldで表示すると、 値がおかしくなる。 

例えば「111111111111111111」は「111111111111111104」になり 

「999999999999999999」は「1000000000000000000」となってオーバーフローする。 

 

何じゃこれは。。。

 

SFDCからの回答。 

 

数値型は内部で倍精度少数を使用しますが、 

倍精度小数点の特性上、丸めが発生するため18桁の9は近似値の1と18桁の0に丸められるために発生する事象となります。 

1が18桁ある場合でも丸めの対象となるため末尾の111が丸められ104となります 

エラーとなる場合ですが、999999999999999999は1000000000000000000となり18桁を超えのエラーとなります。 

同様に 111111111111111111 は近い値である 111,111,111,111,111,104 となります。 

この動作は倍精度浮動小数点数型の特徴である点何卒ご容赦いただければと存じます。 

 

そのため倍精度で丸めの発生しない範囲(15桁)でのデータの取り扱いとして頂くかもしくは文字列としての扱いとして頂くことで、 

エラーの発生を抑止し丸めによる誤差を回避できるかと存じます。

 

だって。

ということで数字型は15桁にしておきましょう。