将字符串解析为浮点数

时间:2012-04-09 14:02:06

标签: c# parsing

现在我知道使用float.Parse的方法但是遇到了问题。

我正在解析字符串“36.360”,但解析后的浮点数变为36.3600006103516。

我可以安全地将它四舍五入到小数点后3位,或者是否有更好的策略来解析字符串中的浮点数。

显然我正在寻找解析后的浮点数为36.360。

5 个答案:

答案 0 :(得分:3)

这与解析无关,但是浮点数的固有“特征”。许多具有精确十进制表示的数字不能完全存储为浮点数,这会导致出现这种不等式。

Wikipedia(网上有很多文章)解释了这些问题。

答案 1 :(得分:2)

浮点数本身就容易出现舍入错误;即使是不同的CPU架构也会在小数百万分之一以及更高的位置给出不同的数字。这也是为什么在比较浮点数时不能使用==的原因......由于浮点精度误差,它们很少被评估为相等。

答案 2 :(得分:1)

浮点数的精度有限。查看this link了解更多详情。

如果您需要更精确的跟踪,请考虑使用类似doubledecimal类型的内容。

答案 3 :(得分:1)

这是因为floatdouble都以这样的方式存储,即从内存中读取值是一个数学过程。如果要将值存储为实际值,则更好的选择是decimal

根据MSDN Page on System.Decimal

  

十进制值类型适用于财务计算   需要大量有效积分和小数位数   没有四舍五入的错误。 Decimal类型并不能消除这种需要   用于舍入。相反,它最小化了由于四舍五入造成的错误。

答案 4 :(得分:1)

这根本不是一个奇怪的问题,它只是你将永远遇到的花车的迷人特征之一。浮点数不能准确表达那种小数值!

因此,如果您需要完全 36.36的结果,请使用decimal而不是float
否则,你可以自由地完成任务。请注意,舍入不会有所帮助,因为在舍入之后它不会完全是36.36。