与 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" 一些特定的数字。 浮点值不精确。它们是近似值。如果您需要精确值,请考虑使用小数数据类型。
我的代码:
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" 一些特定的数字。 浮点值不精确。它们是近似值。如果您需要精确值,请考虑使用小数数据类型。