誰能請向我解釋這裏發生了什麼: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:當它在兩個表示之間的中間位置時,它會向上(或遠離零 - 不確定哪一個 - 但對於正數沒有區別)。 –