现在我知道使用float.Parse的方法但是遇到了问题。
我正在解析字符串“36.360”,但解析后的浮点数变为36.3600006103516。
我可以安全地将它四舍五入到小数点后3位,或者是否有更好的策略来解析字符串中的浮点数。
显然我正在寻找解析后的浮点数为36.360。
答案 0 :(得分:3)
这与解析无关,但是浮点数的固有“特征”。许多具有精确十进制表示的数字不能完全存储为浮点数,这会导致出现这种不等式。
Wikipedia(网上有很多文章)解释了这些问题。
答案 1 :(得分:2)
浮点数本身就容易出现舍入错误;即使是不同的CPU架构也会在小数百万分之一以及更高的位置给出不同的数字。这也是为什么在比较浮点数时不能使用==
的原因......由于浮点精度误差,它们很少被评估为相等。
答案 2 :(得分:1)
浮点数的精度有限。查看this link了解更多详情。
如果您需要更精确的跟踪,请考虑使用类似double
或decimal
类型的内容。
答案 3 :(得分:1)
这是因为float
或double
都以这样的方式存储,即从内存中读取值是一个数学过程。如果要将值存储为实际值,则更好的选择是decimal
。
根据MSDN Page on System.Decimal:
十进制值类型适用于财务计算 需要大量有效积分和小数位数 没有四舍五入的错误。 Decimal类型并不能消除这种需要 用于舍入。相反,它最小化了由于四舍五入造成的错误。
答案 4 :(得分:1)
这根本不是一个奇怪的问题,它只是你将永远遇到的花车的迷人特征之一。浮点数不能准确表达那种小数值!
因此,如果您需要完全 36.36的结果,请使用decimal
而不是float
。
否则,你可以自由地完成任务。请注意,舍入不会有所帮助,因为在舍入之后它不会完全是36.36。