.NET中Math.Floor()和Math.Truncate()的区别是什么?


当前回答

Math.Floor()轮 "朝向负无穷"符合IEEE标准754第4节。

Math.Truncate()舍入“最接近零的整数”。

其他回答

Math.Floor():返回小于或等于指定的双精度浮点数的最大整数。

round():将值舍入为最接近的整数或指定的小数位数。

它们在功能上与正数相等。区别在于他们处理负数的方式。

例如:

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

MSDN链接: ——数学。楼的方法 ——数学。截断方法

附注:小心数学。周围可能不是你期望的那样。

要获得“标准”舍入结果,请使用:

float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5

以下是MSDN对以下内容的描述:

Math.Floor, which rounds down towards negative infinity. Math.Ceiling, which rounds up towards positive infinity. Math.Truncate, which rounds up or down towards zero. Math.Round, which rounds to the nearest integer or specified number of decimal places. You can specify the behavior if it's exactly equidistant between two possibilities, such as rounding so that the final digit is even ("Round(2.5,MidpointRounding.ToEven)" becoming 2) or so that it's further away from zero ("Round(2.5,MidpointRounding.AwayFromZero)" becoming 3).

下面的图表可能会有所帮助:

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

请注意,Round比它看起来强大得多,因为它可以舍入到特定的小数点后数位。其他的都是0小数。例如:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

对于其他函数,你必须使用乘除技巧来达到相同的效果:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

Math.floor()将始终向下舍入。,返回LESSER整数。While round()将返回NEAREST整数

math.floor ()

返回小于或等于指定数字的最大整数。

math.truncate ()

计算一个数的积分部分。

数学。楼层四舍五入,马斯。天花板来了,还有数学。将回合截断至零。因此,数学。截断就像数学。正数的地板,和数学一样。负数的上限。这是参考资料。

为了完整起见,请使用数学。四舍五入到最接近的整数。如果这个数字恰好在两个整数的中间,那么它就会四舍五入到偶数。参考。

参见:暗黑和平的答案。强烈推荐!