Why is 0.1*10-1 not equal is 0?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Why is floating point arithmetic in C# imprecise?
1 2 3 4 5 | Console.WriteLine(0.5f * 2f); // 1 Console.WriteLine(0.5f * 2f - 1f); // 0 Console.WriteLine(0.1f * 10f); // 1 Console.WriteLine(0.1f * 10f - 1f); // 1.490116E-08 |
为什么
参见wiki:浮点。float/double/decimal是相对精度类型。并非所有值(其中有无穷多)都可以精确存储。你看到的是这种精度损失的结果。这就是为什么使用
请阅读(非常准确地解释这种情况):http://www.exploringbinary.com/the-answer-is-one-until-you-use-floating-point/
看看每个计算机科学家都应该知道什么是浮点运算。
由于浮动操作不精确,请看以下内容:
- http://en.wikipedia.org/wiki/浮点数
0.5可以精确地用浮点表示,这就是为什么0.5*2=1精确。
但是,0.1不能精确地表示,因此0.1*10不是1。
简单,近似值累积。