我有一个浮点值: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");