Разница между Math.Floor() и Math.Truncate()
В чем разница между Math.Floor()
и Math.Truncate()
в .NET?
Ответы
Ответ 1
Math.Floor
округляется, Math.Ceiling
округляется, а Math.Truncate
округляется к нулю. Таким образом, Math.Truncate
походит на Math.Floor
для положительных чисел и как Math.Ceiling
для отрицательных чисел. Здесь ссылка.
Для полноты, Math.Round
округляет до ближайшего целого. Если число находится точно на полпути между двумя целыми числами, оно округляется до четного. Ссылка.
Смотрите также: Ответ Pax Diablo. Очень рекомендуется!
Ответ 2
Следуйте этим ссылкам для описания MSDN:
-
Math.Floor
, который округляется до отрицательной бесконечности.
-
Math.Ceiling
, который округляется до положительной бесконечности.
-
Math.Truncate
, который округляется вверх или вниз к нулю.
-
Math.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
Ответ 3
Math.Floor()
раунды к отрицательной бесконечности
Math.Truncate
округляется вверх или вниз к нулю.
Например:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
while
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 3
Ответ 4
Некоторые примеры:
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
Ответ 5
Они функционально эквивалентны положительным числам. Разница заключается в том, как они обрабатывают отрицательные числа.
Например:
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
P.S. Остерегайтесь математики. Возможно, это не так, как вы ожидаете.
Чтобы получить "стандартный" результат округления, используйте:
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
Ответ 6
Math.Floor()
раунды
"к отрицательной бесконечности" в соответствии с IEEE Standard 754, раздел 4.
Math.Truncate()
раунды "до ближайшего целого числа к нулю."
Ответ 7
Попробуйте это, Примеры:
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
math.floor()
Возвращает наибольшее целое число, меньшее или равное указанному числу.
MSDN system.math.floor
math.truncate()
Вычисляет неотъемлемую часть числа.
MSDN system.math.truncate
Ответ 8
Math.floor
Скольжение влево...
Math.ceil
скользит вправо...
Math.truncate
criiiiss crooooss (пол/потолок всегда в направлении 0)
Math.round
ча-ча, очень гладко... (перейти к ближайшей стороне)
Отпусти на работу! (⌐ □ _ □)
Слева... Math.floor
Забери это сейчас, все... --
На этот раз два прыжка... -=2
Все хлопают в ладоши ✋✋
Как низко ты можешь пасть? Вы можете пойти вниз? Вплоть до floor
?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x)
также совпадает с int(x)
.
удаляя положительную или отрицательную дробь, вы всегда движетесь к 0.
Ответ 9
Math.Floor()
: Возвращает наибольшее целое число, меньшее или равное указанному числу с плавающей запятой с двойной точностью.
Math.Round()
: округляет значение до ближайшего целого числа или до указанного количества дробных цифр.
Ответ 10
Mat.floor()
всегда округляется, т.е. возвращает МЕНЬШЕ целое. В то время как round()
вернет самое близкое целое