2016-11-11 60 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