C# precision calculations multiplying int and double
本问题已经有最佳答案,请猛点这里访问。
考虑此代码:
1 2 | Console.WriteLine((197688 * 0.1) == 19768.800000000003); // True Console.WriteLine((197688 * 0.1) == 19768.8); // False |
计算错误吗?
Java-HTTP://IDENE.COM/D3QSUOC->http://ideone.com/wp5pm9
浮点类型(和计算)本质上是不精确的。它们是二进制的,而不是十进制的,因此计算会产生"意想不到的"十进制值。
将其与此进行比较:
1 2 | Console.WriteLine((197688 * 0.1m) == 19768.800000000003m); // False Console.WriteLine((197688 * 0.1m) == 19768.8m); // True |
结果如您所料,因为使用了
旁注:经验法则是永远不要使用浮点类型进行货币计算。正是因为精度问题与决定值。