『Excel』の『double』から『long』への数値の丸めが衝撃的!
整数を扱う事を目的にしていたエクセルで、
まあ、誰かの都合で小数点が含まれた。
そうすると、数値がおかしくなるとの問い合わせが…。
CSVを読み込む処理だったのだが…
『1.5』と『2.5』の読み込み結果が『2』と『2』…。
あれ?
切り捨てで無いの?
少数になったのは、誰かのポカなので、少数は、無くなった。
なので、この不具合も無くなったのだが…
だが、不思議な現象なので、調べてみた。
A列に連番を、B~Eまで、関数の結果を。
で、式は、以下の通り。
因みに『2,147,483,647』は、『Long』の最大値。
数値が丸められないかの確認です。
そして、それぞれの関数が以下の通り。
Function test01(r As Range) As Long
test01 = r.Value
End Function
Function test02(r As Range) As Long
test02 = Int(r.Value)
End Function
Function test03(r As Range) As Long
test03 = Application.WorksheetFunction.RoundDown(r.Value, 0)
End Function
問題のC列は、『doubule』を直接『long』に代入すると発生した…。
正直…
これは、中々に衝撃敵だ!
マジかよ!!!
と、思うのは、無理じゃないよな。
これは、多分バグだろう…。
因みにもう少し細かくみると…
最も、『int()』で正常になるので、使えば良い訳だが…
関数名が『int』なので、『Integer』に丸められうかも…
と、思ったが、そうなっていないので、大丈夫だろう。
しかし、よもやの落とし穴だ…。
個人的には、修正して欲しい。
が!
この不具合を前提に処理をつくてあったりすると…
そこが、不具合が発生するのだ…。(笑)
さて、これは、そう言うものだと対処するしかなさそうだ…。
| 固定リンク
コメント