谁能请向我解释这里发生了什么:C#float精度
using System;
using System.Text;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
object o = 1000000.123f;
float f= Convert.ToSingle(o);
double d = Convert.ToDouble(f);
Console.WriteLine(f.ToString("r"));
Console.WriteLine(d.ToString("r"));
Console.ReadLine();
}
}
}
,输出:
1000000.13
1000000.125
我预计:
对象O有一个潜在的浮动类型(似乎发生[观察手表w indow它的类型为对象{}浮动)
这1000000.123f会被存储f中为1000000.125(IEEE754的近似在32位?)
,双将存储1000000.125以及(似乎发生即使f似乎并不包含我所期望的)
在ToString上要求往返格式会使我在两种情况下返回1000000.125。
任何人都可以告诉我什么我做错了,以获得1000000.13时,串出f?
感谢您的答案(和抬头重新:我的转换nop)。有没有float.ToString()不是四舍五入的数字?截断会不会导致1000000.12? –
@StephenEmm:当它在两个表示之间的中间位置时,它会向上(或远离零 - 不确定哪一个 - 但对于正数没有区别)。 –