首页 > 解决方案 > 将字符串转换为浮点数对于某些数字但不是其他数字失败

问题描述

我有以下数字作为字符串;22570438、22570481、22570480。

var listOfStrings = new List<string> { "22570438", "22570481", "22570480" };

foreach (var val in listOfStrings)
{
    float numTest = 0;
    numTest = Convert.ToInt64(float.Parse(val));
    numTest = long.Parse(val);
    numTest = float.Parse(val.ToString().TrimStart().TrimEnd(), CultureInfo.InvariantCulture.NumberFormat);
}

对于数字 22570438,在这 3 个实例中,返回的数字是 22570438,与 22570480 一样,但对于 22570481,这 3 个实例返回 22570480。下面的代码是我如何进行测试的示例,而不是代码问题。我在其他项目中尝试过,仍然得到相同的结果。

有没有人遇到过这个问题,将 22570481 转换为浮点数时是否是编译器问题?

我试图找到类似的问题,但如果有人知道可以帮助的帖子,请回复链接。

标签: c#.net

解决方案


float精度有限;它不能准确地存储超过一定大小的任意整数,并且它没有精度来保留你想要的东西。

考虑使用int,decimaldouble代替。

它不是编译器错误或运行时错误。它是浮点运算的基本特征(在本例中为 32 位 IEEE 754 浮点)


推荐阅读