我在C#windows应用程序项目中有以下代码:
双重测试= 2.24 * 100;
如果我添加一个手表进行测试,可以预期值为224,但实际上是: 224.00000000000003
任何人都可以解释额外的.00000000000003来自何处?
答案 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)
许多其他人已经解释过这一点,比我更有说服力。请尝试以下链接:
如果仍然让您挠头,只需<插入喜爱的搜索引擎> for“每个程序员应该了解浮点运算”