float.Parse返回不正确的值

时间:2011-08-25 16:01:04

标签: c# .net parsing floating-point

我的string X值为2.26

当我使用float.Parse(X)解析它时..返回2.2599999904632568。为什么这样?以及如何克服这一点?

但如果我使用double.Parse(X),则会返回确切的值,即2.26

编辑代码

float.Parse(dgvItemSelection[Quantity.Index, e.RowIndex].Value.ToString());

感谢您的帮助

5 个答案:

答案 0 :(得分:7)

这是由于浮点数的精度有限。它们不能代表无限精确的值,而且往往采用近似值。如果您需要高度精确的数字,则应使用Decimal代替。

有很多关于这个主题的文献,你应该看看。我最喜欢的资源是以下

答案 1 :(得分:2)

因为浮点数不能正确表示基数10中的十进制值。

如果您想要精确表示,请使用十进制。

Jon Skeet on this topic

答案 2 :(得分:1)

并非所有数字都可以完全以浮点重复。进行近似,当你在一个不确定的数字上进行操作后,情况会变得更糟。

请参阅此Wikipedia条目以获取示例:http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

如果您将输入更改为可以通过浮点(如1/8)精确表示的内容,则可以使用。尝试使用数字2.25,它将按预期工作。

唯一可以正常工作的数字是可以用1 / 2,1 / 4,1 / 8,1 / 16等中的任何一个的总和来表示的数字,因为这些数字用二进制0.1,0.01表示,0.001,0.0001等

本质上,所有浮点系统都会出现这种情况。 .Net,JavaScript等。

答案 3 :(得分:0)

它会在float中返回最佳近似值2.26。您可能会获得比这更有效的数字,因为您的浮动正在打印为double而不是float

答案 4 :(得分:0)

当我测试时

var str = "2.26";

var flt = float.Parse(str);
VS调试器中的

flt正好是2.26

你如何看待它的回归?

相关问题