Vb.Net数学是否破碎?

Sat*_*ish -1 .net vb.net math floating-point

在执行过程中,

我只是打开了即时窗口,我输入了这样的,

?1.66 + 0.83
Run Code Online (Sandbox Code Playgroud)

因此,此表达式显示以下内容,

2.4899999999999998
Run Code Online (Sandbox Code Playgroud)

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

Kna*_*ģis 14

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

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

例如,试试

?1.66D + 0.83D
Run Code Online (Sandbox Code Playgroud)

D 后缀表示该值是类型Decimal


归档时间:

查看次数:

161 次

最近记录:

12 年,8 月 前