我从字符串解析浮点值时遇到一些问题
问题是值的小数部分,这里是例子:
var tmp = "263148,21";
var ftmp = float.Parse(tmp); //263148.219
我尝试了其他一些值,但我没有想到,出于什么原因,一些十进制值不正确。
答案 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