我的string X
值为2.26
当我使用float.Parse(X)
解析它时..返回2.2599999904632568
。为什么这样?以及如何克服这一点?
但如果我使用double.Parse(X)
,则会返回确切的值,即2.26
。
编辑代码
float.Parse(dgvItemSelection[Quantity.Index, e.RowIndex].Value.ToString());
感谢您的帮助
答案 0 :(得分:7)
这是由于浮点数的精度有限。它们不能代表无限精确的值,而且往往采用近似值。如果您需要高度精确的数字,则应使用Decimal
代替。
有很多关于这个主题的文献,你应该看看。我最喜欢的资源是以下
答案 1 :(得分:2)
答案 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
。
你如何看待它的回归?