与 Microsoft Docs 相比,将浮点数解析为字符串会给出不同的结果

Parsing float to string gives different result compare to Microsoft Docs

我的代码:

float st = -195489100.8377F;  

Console.WriteLine("   {0,5}: {1}", "F", st.ToString("F", CultureInfo.GetCultureInfo("en-US")));

// output:
//        F: -195489100.00

但是 Docs.Microsoft 是结果:

//              F: -195489100.84

我在没有 CultureInfo.GetCultureInfo("en-US") 的情况下也尝试过,但它是一样的。

我的目标是将这个浮点数解析为字符串:

float st = 16777215.255f;

我的结果是 16777220.00 使用上面的方法。但我正好需要

"16777215.255"

在C#语言中,float数据类型使用32位来存储。是 32-bit IEEE-754。该格式给出了大约 7 位数的精度。因此,当您使用 float st = 16777215.255f; 时,您提供的精度比格式可以存储的精度高,因此当您显示它时,您会得到 16777220.00

您可以使用 double 数据类型获得所需的精度。那是 64-bit IEEE-754,大约有十五位精度。顺便说一句,它是 Javascript 用于数字的数据类型。

但是,请注意。你说你需要 "exactly" 一些特定的数字。 浮点值不精确。它们是近似值。如果您需要精确值,请考虑使用小数数据类型。