VB6にて、小数(Double)から整数(Integer)への暗黙変換時の切捨/切上のルールについて
VB6からVB.NETへのコンバートをした際に、
それぞれの言語で少数部が”5”のとき、小数(Double)から整数(Integer)への暗黙変換時の値が異なりました。
VB.NETは銀行丸め(偶数丸め)となることは理解できたのですが、VB6の仕様が不明です。
VB6の少数部が5であるときの、切捨/切上の仕様を教えていただけますでしょうか。
例
【例1】小数 → 整数(暗黙変換)
VB6:360.5→361 奇数に切上される
.NET:360.5→360 偶数に切捨てられる
【例2】小数 → 整数(暗黙変換)
VB6:367.5→368 偶数に切上される
.NET:367.5→368 偶数に切上される
補足
VB6はランダムに切捨/切上を行っているわけではなく、「360.5」であれば必ず「361」となり、
何かしらの法則を持っているように見えます。
Dim dblValue As Double
Dim intValue As Integer
dblValue = 360.5
intValue = dblValue
Debug.Print intValue
VB6 も 360 になりませんか?
銀行家の丸めになるはずですが・・・
投稿をありがとうございます。
すみません。状況が正確ではありませんでした。
Integer*Doubleの結果をInteger型に格納する際に発生しております。
【例】
350*1.03=360(Integer型)
回答のほうに転記しました。
回答のほうに転記しました。
わかりやす例をありがとうございます。
つまり、
VB6では演算を内部的には2進数で行っており、その際に2進数では「1.03」を表現しきれない(桁落ちしている?)ため、演算結果が変わっているという理解でよろしいでしょうか?
もし認識に誤りがなければベストアンサーとさせていただきたいため、回答のほうに投稿をお願いいたします。
蛇足ですが、VBScript だと、
WScript.Echo CInt(CInt(350) * CDbl(1.03))
は 361 でなく 360 でした。(VB6 と同じ結果になると思ったのですが・・)
回答2件
あなたの回答
tips
プレビュー