为什么c#的float.MaxValue精度比它允许的更多?

时间:2016-04-18 16:38:47

标签: c# numbers double precision

C#代码:

double value = 3.40282347E+38;
Console.WriteLine(value / 2);

给出不同的值(C#给出1.70141173319264E + 38和C#没有花车给我1.701411735e + 38)我。

当我使用c#代码时:

{{1}}

我和浮子一样。 MSDN错了吗?

Dot Net Fiddle
float.MaxValue是3.40282347E + 38。
Float MaxValue

1 个答案:

答案 0 :(得分:2)

摆弄我发现了 当Console.WriteLine(((3.40282347E+38 / 2) == (float.MaxValue / 2)).ToString());打印False时,Console.WriteLine(((3.40282347E+38f / 2) == (float.MaxValue / 2)).ToString());打印True。这是因为语言是这样做的:

By default, a real numeric literal on the right side of the assignment operator is treated as double

您的号码是double,您将其与float进行比较,因此默认情况下精度不同。您必须通过在其末尾添加float来强制将该数字设为f