【发布时间】:2013-11-18 06:33:19
【问题描述】:
所以,这里有一个重复的问题:
在我客户的一台机器上,我有这段代码,
public double getFreeSpace()
{
return this.totalSize - this.listElements.Sum();
}
当这样的减法发生时:(1.0 - 0.8) 预期的结果是(0.2),但她得到的结果是0.199999。
虽然这不是预期的结果,但如何获取 0.2 作为此代码的输出?
stackoverflow 问题here 讨论了相同的问题,但建议使用decimal 作为替代方案。 (但是,还要注意,在同一个答案中,我们会收到警告:It is a 128 bit datatype as opposed to 64 bit which is the size of a double)。
我也试过了,Math.Round(1.0-0.8, 0, MidpointRounding.AwayFromZero) 但这不起作用。
现在的问题是,如何在保持 datatype as double 相同的同时获得所需的答案 0.2 without using a decimal ?
【问题讨论】:
-
如果不使用小数,就无法准确表示 0.2。不过,您可以更改之后的显示方式。您打算如何处理输出?
-
问:现在的问题是,如何在保持与 double 相同的数据类型的同时获得所需的答案为 0.2?答:了解浮点数的工作原理:effbot.org/pyfaq/…
-
-1:非常不清楚您从链接的问题中没有理解什么。它清楚地表明“......它也不允许精确表示数字 0.2......”,并带有大量带有解释/深入技术细节的链接。如果你把你不明白的东西表现出来,这个问题可能没问题。
-
从一开始就试图过度优化被称为“过早优化”,实际上这是一个非常糟糕的主意。它导致难以维护的过于复杂的代码令人困惑。代码清晰和简单,性能配置文件,只优化慢位。任何在 6 个月内查看您的代码的人都会感谢您(包括您自己!)。
-
@Baldrick:选择适合所需计算的数据类型和算法并不是过早的优化。
标签: c# .net floating-point double