在C#中将双倍乘以100导致出乎意料的答案

时间:2011-09-27 11:19:19

标签: c# math floating-point multiplication

  

可能重复:
  C# Maths gives wrong results!

我在C#windows应用程序项目中有以下代码:

双重测试= 2.24 * 100;

如果我添加一个手表进行测试,可以预期值为224,但实际上是: 224.00000000000003

任何人都可以解释额外的.00000000000003来自何处?

5 个答案:

答案 0 :(得分:15)

  

在C#中将小数乘以100会导致意外答案

首先,您还没有乘以十进制 - 您将IEEE 754浮点数乘以100。

因为2.24不存在double。但是,如果你这样做:

decimal test = 2.24M * 100;

它会表现得像你期望的那样。

答案 1 :(得分:4)

这是设计行为,这是浮点数的工作原理 - 精度实际上是有限的。见Floating Point Numbers - Accuracy Problems

答案 2 :(得分:2)

这是一个舍入错误,并非所有数字都可以在double

中准确表示

答案 3 :(得分:1)

您的结果是因为2.24不是确切的数字。除了你提供的2之外,还有更重要的数字。我会尝试乘以100.00,然后使用仅3个有效数字对数字进行舍入。

我应该澄清你需要使用decmial变量而不是double。双精度不能代表确切的值。

答案 4 :(得分:1)

许多其他人已经解释过这一点,比我更有说服力。请尝试以下链接:

Simple explanation

Advanced explanation

如果仍然让您挠头,只需<插入喜爱的搜索引擎> for“每个程序员应该了解浮点运算”