C# 与Microsoft文档相比,将float解析为字符串会得到不同的结果

C# 与Microsoft文档相比,将float解析为字符串会得到不同的结果,c#,floating-point,precision,tostring,ieee-754,C#,Floating Point,Precision,Tostring,Ieee 754,我的代码: float st=-195489100.8377F; Console.WriteLine(“{0,5}:{1}”,“F”,st.ToString(“F”,CultureInfo.GetCultureInfo(“en-US”)); //输出: //F:-195489100.00 但结果是: // F: -195489100.84 我也在没有CultureInfo.GetCultureInfo(“en-US”)的情况下尝试了它,但它是一样的 我的目标是将此浮

我的代码:

float st=-195489100.8377F;
Console.WriteLine(“{0,5}:{1}”,“F”,st.ToString(“F”,CultureInfo.GetCultureInfo(“en-US”));
//输出:
//F:-195489100.00
但结果是:

//              F: -195489100.84
我也在没有CultureInfo.GetCultureInfo(“en-US”)的情况下尝试了它,但它是一样的

我的目标是将此浮点值解析为字符串:

float st=16777215.255f;
使用上述方法,我的结果是16777220.00。但我确实需要

“16777215.255”
在C#语言中,
float
数据类型使用32位进行存储。是的。这种格式给出了大约7位数的精度。所以当你使用
float st=16777215.255f
您提供的精度比格式所能存储的精度高,因此当您显示它时,您会得到
16777220.00

您可以使用
double
数据类型获得所需的精度。也就是说,大约有15位精度。顺便说一下,这是Javascript用于数字的数据类型


但是,要小心。你说你需要某个特定的号码浮点值不精确。它们是近似值。如果需要精确值,请考虑使用十进制数据类型。

叹息。每个程序员都需要了解浮点精度。大学停止教授了吗?@O.Jones你对一个读过文档的人太苛刻了,文档告诉他完全错了,所以他们问这个问题是公平的。浮点数是精确的。根据IEEE-754规范,每个浮点数字数据(因此不包括NAN)精确表示一个数字。近似实数运算的是浮点运算,而不是数字。这包括从十进制数字到二进制浮点的转换,反之亦然。理解这一区别对于能够设计正确的浮点运算软件、计算错误界限以及编写有关浮点运算的证明非常重要。