« 『カップヌードルみそ』を食ってみるた♪ | トップページ | 『コーラアップ』を食ってみた。 »

2020年7月 1日 (水)

『Excel』の『double』から『long』への数値の丸めが衝撃的!

整数を扱う事を目的にしていたエクセルで、

まあ、誰かの都合で小数点が含まれた。

そうすると、数値がおかしくなるとの問い合わせが…。

CSVを読み込む処理だったのだが…

『1.5』と『2.5』の読み込み結果が『2』と『2』…。

あれ?

切り捨てで無いの?

少数になったのは、誰かのポカなので、少数は、無くなった。

なので、この不具合も無くなったのだが…

だが、不思議な現象なので、調べてみた。

A列に連番を、B~Eまで、関数の結果を。

0001_20200729212101

で、式は、以下の通り。

0002_20200729212101

因みに『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』に代入すると発生した…。

正直…

これは、中々に衝撃敵だ!

マジかよ!!!

と、思うのは、無理じゃないよな。

これは、多分バグだろう…。

因みにもう少し細かくみると…

0003_20200729212101

これは、ビット操作の不具合?

最も、『int()』で正常になるので、使えば良い訳だが…

関数名が『int』なので、『Integer』に丸められうかも…

と、思ったが、そうなっていないので、大丈夫だろう。

しかし、よもやの落とし穴だ…。

個人的には、修正して欲しい。

が!

この不具合を前提に処理をつくてあったりすると…

そこが、不具合が発生するのだ…。(笑)

さて、これは、そう言うものだと対処するしかなさそうだ…。

|

« 『カップヌードルみそ』を食ってみるた♪ | トップページ | 『コーラアップ』を食ってみた。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 『カップヌードルみそ』を食ってみるた♪ | トップページ | 『コーラアップ』を食ってみた。 »