我将2097151.3
赋值给float变量,应用程序仅打印整数部分。可能的错误?.NET核心浮点变量不打印小数点
public static void Main(string[] args)
{
float foo = 2097151.3F;
Console.WriteLine(foo); // prints 2097151
Console.ReadKey();
}
我正在运行.NET Core控制台应用程序。
我将2097151.3
赋值给float变量,应用程序仅打印整数部分。可能的错误?.NET核心浮点变量不打印小数点
public static void Main(string[] args)
{
float foo = 2097151.3F;
Console.WriteLine(foo); // prints 2097151
Console.ReadKey();
}
我正在运行.NET Core控制台应用程序。
没有。自20世纪40年代以来,浮点数已经出现了。 A float
只对7位有效数字非常有用。
的最近float
到2097151.3
为2097151.25
,并WriteLine
是足够聪明的知道这一点,所以相应地截断。
如果要精确十进制值,请使用decimal
类型。
所以问题是为什么'WriteLine'截断值,如果我实际上是'2097151.25'。 – HimBromBeere
@HimBromBeere:因为“笑话”数字是不相关的,C#是明智的。如果必须的话,你可以调整信息以产生所有的数字。 – Bathsheba
如果一个浮点数(我的浮点数为2097151.3)只能存储7个数字(2097151),为什么你要说2097151.25? – Joe
请访问https://msdn.microsoft.com/en-us/library/b1e65aza.aspx查看精度规格 - 仅有7位数 – rbm
[浮点数学是否被破坏?](http://stackoverflow.com)/questions/588004/is-floating-point-math-broken) – HimBromBeere