Math.Floor()和Math.Truncate()之间的区别

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


#1楼

Math.Floor()符合IEEE标准754第4节“向负无穷大” Math.Floor()

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


#2楼

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

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


#3楼

一些例子:

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1

#4楼

它们在功能上等同于正数。 不同之处在于它们如何处理负数。

例如:

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

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

MSDN链接: - Math.Floor方法 - Math.Truncate方法

PS小心Math.Round它可能不是你所期望的。

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

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

#5楼

Math.Floor向下Math.CeilingMath.Ceiling向上Math.FloorMath.Ceiling向下Math.Ceiling Math.Truncate为零。 因此, Math.Truncate就像Math.Floor为正数,和类似Math.Ceiling为负数。 这是参考 。

为了完整性, Math.Round入到最接近的整数。 如果数字正好位于两个整数之间,那么它将朝向偶数。 参考。

另见: Pax Diablo的回答 。 强烈推荐!


#6楼

math.floor()

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

MSDN system.math.floor

math.truncate()

计算数字的整数部分。

MSDN system.math.truncate

Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4

Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3

另外Math.Round()

   Math.Round(1.6) = 2
   Math.Round(-8.56) = -9
   Math.Round(8.16) = 8
   Math.Round(8.50) = 8
   Math.Round(8.51) = 9

#7楼

左边是Math.floor sliiiide ...
Math.ceil sliiiide向右...
Math.truncate criiiiss crooooss(地板/ ceil始终朝向0)
Math.round cha cha,真正流畅...(转到最近的一侧)

我们去上班吧! (⌐□□_)

在左边...... Math.floor
把它收回你们现在... --
这次两次跳...... -=2

每个人都拍手✋✋

你有多低? 你可以低调吗? 一路到floor

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)也与int(x)相同。
通过删除正或负分数,您总是朝0。


#8楼

Mat.floor()将始终向下舍入,即。,它返回LESSER整数。 而round()将返回NEAREST整数


#9楼

请按照以下链接获取MSDN描述:

  • Math.Floor ,向下Math.Floor负无穷大。
  • Math.Ceiling ,向正无穷大四舍五入。
  • Math.Truncate ,向上或向下Math.Truncate为零。
  • Math.RoundMath.Round入到最接近的整数或指定的小数位数。 您可以指定行为,如果它在两种可能性之间完全等距,例如舍入使得最后一位数是偶数(“ Round(2.5,MidpointRounding.ToEven) ”变为2)或者它更远离零(“ Round(2.5,MidpointRounding.AwayFromZero) “成为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比它看起来更强大,只是因为它可以舍入到特定的小数位数。 所有其他的总是小数点零。 例如:

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

#10楼

Math.Floor()向负无穷大Math.Floor()

Math.Truncate向上或向下Math.Truncate为零。

例如:

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3

你可能感兴趣的:(.net,math)