c# - 将字符串转换为浮点数对于某些数字但不是其他数字失败
问题描述
我有以下数字作为字符串;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 转换为浮点数时是否是编译器问题?
我试图找到类似的问题,但如果有人知道可以帮助的帖子,请回复链接。
解决方案
float
精度有限;它不能准确地存储超过一定大小的任意整数,并且它没有精度来保留你想要的东西。
考虑使用int
,decimal
或double
代替。
它不是编译器错误或运行时错误。它是浮点运算的基本特征(在本例中为 32 位 IEEE 754 浮点)