390


54

Math.Floor()とMath.Truncate()の違い

http://msdn.microsoft.com/en-us/library/9a6a2sxy.aspx [Math.Floor()]とhttp://msdn.microsoft.com/en-us/library/の違いは何ですか? .NETのsystem.math.truncate.aspx [Math.Truncate()]

10 Answer


456


Math.Floorは切り捨て、Math.Ceilingは切り上げ、そしてMath.Truncateはゼロに切り上げます。 したがって、 Math.Truncate`は正数の場合は Math.Floor`、負数の場合は `Math.Ceiling`のようになります。 これがhttp://msdn.microsoft.com/en-us/library/system.math.truncate.aspx[reference]です。

完全を期すために、 `Math.Round`は最も近い整数に丸めます。 数値が2つの整数のちょうど中間にある場合は、偶数に向かって四捨五入されます。 Reference。

Pax Diablo’s answerも参照してください。 強くお勧めします!


366


MSDNの説明については、次のリンクをたどってください。

次の図表を参考にしてください。

-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


54


Math.Floor()は負の無限大に丸めます

`Math.Truncate`はゼロに向かって増減します。

例えば:

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

しながら

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


42


いくつかの例:

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.5) 1.55、1、MidpointRounding.AwayFromZero)= 1.6ラウンド(1.65、1、MidpointRounding.AwayFromZero)= 1.7

切り捨て(2.10)= 2切り捨て(2.00)= 2切り捨て(1.90)= 1切り捨て(1.80)= 1


22


それらは機能的に正の数と同等です。 違いは負の数の扱い方です。

例えば:

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

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

P.S Math.Roundに注意してくださいそれはあなたが期待するものではないかもしれません。

"標準的な"丸め結果を得るには、

float myFloat = 4.5; Console.WriteLine(Math.Round(myFloat)); // 4つのConsole.WriteLineを書き込みます(Math.Round(myFloat、0、MidpointRounding.AwayFromZero))// 5つのConsole.WriteLine(myFloat.ToString( "F0"))を書き込みます。 // 5を書き込みます


21


http://msdn.microsoft.com/ja-jp/library/system.math.floor.aspx [Math.Floor()]はhttp://standards.ieee.orgに準拠して「負の無限大に向かって」丸めます。 /findstds/standard/754-2008.html [IEEE規格754]セクション4。

http://msdn.microsoft.com/ja-jp/library/system.math.truncate.aspx [Math.Truncate()]は、「最も近い整数にゼロに向かって丸めます」。


18


  • math.floor() *

指定された数以下の最大の整数を返します。

  • 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


13


Math.Floor():指定された倍精度浮動小数点数以下の最大の整数を返します。

Math.Round():値を最も近い整数または指定された小数桁数に丸める


11


Math.floor`左にスライドしています…​ `Math.ceil`右にスライドしています…​ `Math.truncate criiiiss crooooss(フロア/天井は常に0に向かっています)` Math.round` cha cha、本当に滑らかな…​ (一番近い側へ)

仕事に行こう! (⌐□_□)

左に…​ Math.floor`今すぐ元に戻しましょう… `--`今回は2ホップ… ` - = 2

みんな手をたたいて

あなたはどのくらい低く行くことができますか? あなたは低く下がることができますか? 「床」までずっと?

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

Math.truncate(x)もint(x)と同じです。 正または負の端数を削除すると、常に0に向かっています。


3


`Mat.floor()`は常に切り捨てます、すなわち、それはLESSER整数を返します。 round()はNEAREST整数を返します。