【问题标题】:Why 60.5 - 60.1 is 0.399999999999999 ? In C# double variable [duplicate]为什么 60.5 - 60.1 是 0.399999999999999 ?在 C# 中双变量 [重复]
【发布时间】:2016-12-23 05:16:15
【问题描述】:
double a=60.5;
double a=60.1;

Console.WriteLine(a-b);

返回值为 0.399999999999999 而不是 0.4

【问题讨论】:

  • SO 上关于浮点不精确性的七百五十万个其他问题没有满足您的好奇心有什么原因吗? :-)
  • @paxdiablo:我猜实际上只有 7499999 个其他问题,而这是缺少的一个......

标签: c#


【解决方案1】:

是因为你用了double:double是浮点数,不精确;另一方面,十进制是精确的。如果您将两个变量都更改为十进制,它将是确切的数字。

这就是为什么在某些领域(例如金融行业)中,为了准确和精确,需要使用小数。

【讨论】:

  • 这不准确。 Decimal 也是浮点数。最大的区别在于float 是base-2,因此只能近似base-10 数字,而Decimal 是base-10,它消除了由于简单近似而导致的任何错误。如果使用不当,它仍然容易出现精度错误。
  • 双精度 精确,因为它们具有精确性。他们没有的是无限精确。其他没有无限精度的东西是小数 :-) 没有任何编码方法(除了实际符号)可以处理所有情况,例如 √2πe - 这些都将导致 Decimal 类型的精度损失。另请参阅stackoverflow.com/questions/8270789/…
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2015-08-04
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多