使用ToString("F1")时浮点的舍入不正确

L. *_*ins 11 c# string format floating-point

我有一个浮动值:12345.6489

我使用时格式化:

(12345.6489f)的ToString( "F1")

然后我得到了结果

12345.7

但这是不正确的,因为它应该是12345.6.

有谁知道为什么会这样?另一个提示是在格式化之前转换为double会返回正确的结果,如果我的浮点值稍微小一点,例如1234.6489,那么我也得到正确的结果.

Jep*_*sen 3

这似乎与我前段时间问的一个问题有关:Round-twice error in .NET's Double.ToString method

请注意,如果您拨打.ToString("G")您的号码,它会正确四舍五入为12345.65。如果将四舍五入后的数字四舍五入到小数点后一位,就会出现问题。

当我早些时候调查自己的问题时,我还发现了一些无法解释为两次循环错误的示例,因此也请检查该线程。

加法:请注意,任何可以(精确地)由 a 表示的数字float也可以由 a 表示(带有大量零位)double。人们可以使用以下技巧(问题也提到了):

float x = 12345.6489f;
string trick = ((double)x).ToString("F1");
Run Code Online (Sandbox Code Playgroud)