c# – 使用ToString(“F1”)时float的值不正确

前端之家收集整理的这篇文章主要介绍了c# – 使用ToString(“F1”)时float的值不正确前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个浮点值:12345.6489

当我使用以下格式化时:

(12345.6489f)的ToString( “F1”)

然后我得到一个结果

12345.7

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

有人明白为什么会发生这种情况吗?另一个提示是,在格式化之前,转换加倍返回正确的结果,如果我的浮点值稍小一些,例如1234.6489,那么我也得到正确的结果.

解决方法

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

请注意,如果您在号码上调用.ToString(“G”),则将其正确舍入为12345.65.如果将舍入的数字舍入为十进制数,则会出现问题.

当我早些时候调查了我自己的问题时,我还发现一些不能被解释为二次错误的例子,所以检查这个线程.

附加:请注意,浮点数可以表示(完全)的任何数字也可以用双倍表示(大量零位).人们可以使用以下技巧(这个问题也提到):

float x = 12345.6489f;
string trick = ((double)x).ToString("F1");

猜你在找的C#相关文章