【发布时间】:2017-10-11 06:51:35
【问题描述】:
众所周知,用 == 运算符比较双精度值是不安全的。在本例中,它返回 false:
double d1 = 0.11;
double d2 = 0.44 - 0.33;
Console.WriteLine(d1 == d2);
但是,如果我们将值转换为十进制,它会返回 true:
double d1 = 0.11;
double d2 = 0.44 - 0.33;
Console.WriteLine((decimal)d1 == (decimal)d2);
比较从 double 转换的小数是否总是安全的,或者在某些情况下会产生意想不到的结果?
更新: 侯赛因的例子很好,它表明它可能是错误的。但我更感兴趣的是看看是否有相反的例子,当我们期望十进制值相等而它们不相等时。更广泛地说,当我们从 double 转换为 decimal 时究竟会发生什么。
【问题讨论】:
-
@Alexander 不,在问我之前我已经看到了这个问题。我的问题完全不同。
-
该主题中有答案,描述了这种转换是可能的,而不会影响准确性。
-
@Alexander 但我问的不是这个。
标签: c# .net floating-point