2016-11-11 68 views
-1

我將2097151.3賦值給float變量,應用程序僅打印整數部分。可能的錯誤?.NET核心浮點變量不打印小數點

public static void Main(string[] args) 
{ 
    float foo = 2097151.3F; 

    Console.WriteLine(foo); // prints 2097151 

    Console.ReadKey(); 
} 

我正在運行.NET Core控制檯應用程序。

Screenshot

+1

請訪問https://msdn.microsoft.com/en-us/library/b1e65aza.aspx查看精度規格 - 僅有7位數 – rbm

+1

[浮點數學是否被破壞?](http://stackoverflow.com)/questions/588004/is-floating-point-math-broken) – HimBromBeere

回答

2

沒有。自20世紀40年代以來,浮點數已經出現了。 A float只對7位有效數字非常有用。

最近float2097151.32097151.25,並WriteLine是足夠聰明的知道這一點,所以相應地截斷。

如果要精確十進制值,請使用decimal類型。

+0

所以問題是爲什麼'WriteLine'截斷值,如果我實際上是'2097151.25'。 – HimBromBeere

+0

@HimBromBeere:因爲「笑話」數字是不相關的,C#是明智的。如果必須的話,你可以調整信息以產生所有的數字。 – Bathsheba

+0

如果一個浮點數(我的浮點數爲2097151.3)只能存儲7個數字(2097151),爲什麼你要說2097151.25? – Joe