我真的很困惑。我的代码:
Console.WriteLine(myChanges + " TEN METHOD " + (ten_num * TEN));(This for debug)
if ((myChanges - (ten_num * TEN)) >= 0)
{
}else
print error message
喜欢myChannges = 0.3; TEN = 0.1; ten_num = 3,但是当我打印(myChanges - (ten_num * TEN))
时
它等于5.4411512312578E-17
为什么不是0?任何解决方案?
答案 0 :(得分:11)
这是由于浮点运算固有的舍入误差。 有关详细信息,请参阅http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。
答案 1 :(得分:1)
正如已经回答的那样,浮点/双打有舍入错误。要解决这个问题,您可以考虑使用BigDecimal对象或BigInteger对象。它们更慢但更准确。此外,它们基本上可以保留任意数量的数字。