Vb.Net数学是否破碎?

时间:2013-10-08 14:11:50

标签: .net vb.net math floating-point

在执行过程中,

我刚刚打开了即时窗口,我输入了这样的内容,

?1.66 + 0.83

因此,此表达式的结果显示了以下内容,

2.4899999999999998

实际上,表达式应该已经返回2.49但是它返回了具有不同浮点的相同值。这有什么问题。?有没有可用于解决此问题的工作。?顺便说一句,我不想​​格式化上述值。

2 个答案:

答案 0 :(得分:14)

这就是浮动数字的工作原理。它们具有一定程度的精确度,当您编写1.66时,它实际上可能存储为1.660000000000000000011.65999999999999999在内存中。因此,当您开始将这些数字加在一起时,会出现小错误。

如果你想避免这种情况,你可以使用System.Decimal数据类型来解决这个问题大多数场景(它使用不同的模型将值存储在内存中以保留精确值)。​​

例如,尝试

?1.66D + 0.83D

D suffix表示该值的类型为Decimal

答案 1 :(得分:0)

即时窗口显示小数位的值,这是默认操作,如果你想要2位小数,则需要应用格式化。