小编典典

.NET中双倍乘法是否中断?

c#

如果我在C#中执行以下表达式:

double i = 10*0.69;

i是:6.8999999999999995。为什么?

我知道像1/3这样的数字很难用二进制表示,因为它具有无限重复的小数位,但是对于0.69来说不是这样。0.69很容易用二进制表示,一个二进制数表示69,另一个表示小数点的位置。

我该如何解决?使用decimal类型?


阅读 246

收藏
2020-05-19

共1个答案

小编典典

因为您误解了浮点运算和数据存储方式。

实际上,在这种特殊情况下,您的代码实际上在执行时并没有执行任何算术运算- 编译器 会执行该操作,然后在生成的可执行文件中保存一个常量。但是,它 无法
存储6.9的精确值,因为该值不能以浮点数格式精确表示,就像1/3不能以有限的十进制表示形式精确存储一样。

看看本文是否对您有帮助。

2020-05-19