从字符串解析float

时间:2015-05-18 10:33:53

标签: c# parsing

我从字符串解析浮点值时遇到一些问题 问题是值的小数部分,这里是例子:

var tmp = "263148,21";
var ftmp = float.Parse(tmp); //263148.219

我尝试了其他一些值,但我没有想到,出于什么原因,一些十进制值不正确。

3 个答案:

答案 0 :(得分:3)

这与OP代码中的逗号没有任何关系 - 相反,这个问题是关于float值并不能准确表示实数。

浮点数的精度有限。对于非常精确的数字,您应该使用double代替。

另请参阅此答案:why-is-floating-point-arithmetic-in-c-sharp-imprecise?并查看详情:What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:1)

var tmp = "263148,21";
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ",";
var ftmp = double.Parse(tmp, culture);

您必须使用double代替float

答案 2 :(得分:0)

如其他答案和评论所述,这与浮点精度有关。

如果您需要具有完全相同的小数或利用舍入错误,请考虑使用Decimal。但请注意,此类型的重量更重(128位),可能不适合您的情况。

var tmp = "263148,21";
var dtmp = Decimal.Parse(tmp); //263148.21