В чем разница между Math.Floor()
и Math.Truncate()
в .NET?
В чем разница между Math.Floor()
и Math.Truncate()
в .NET?
Ответы:
Math.Floor
округляет, Math.Ceiling
округляет и Math.Truncate
округляет до нуля. Таким образом, Math.Truncate
это как Math.Floor
для положительных чисел, и как Math.Ceiling
для отрицательных чисел. Вот ссылка .
Для полноты Math.Round
округляем до ближайшего целого числа. Если число находится точно посередине между двумя целыми числами, то оно округляется до четного. Ссылка.
Смотрите также: ответ Пакс Диабло . Настоятельно рекомендуется!
(int)myDouble
отличается от (int)Math.Truncate(myDouble)
?
Перейдите по этим ссылкам для описания 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
even
что это свойство последней цифры округленного числа, а не значение целого числа , кратного двум. Кстати, извините, что так долго возвращался к вам, надеюсь, вы просто сидели без дела, ожидая моего ответа :-)
Math.Floor()
округляет в сторону отрицательной бесконечности
Math.Truncate
округляется вверх или вниз до нуля.
Например:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
пока
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 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
Math.floor
sliiiide влево ...
Math.ceil
sliiiide вправо ...
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.
Они функционально эквивалентны с положительными числами. Разница в том, как они обрабатывают отрицательные числа.
Например:
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
Попробуйте это, Примеры:
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
math.floor()
Возвращает наибольшее целое число, меньшее или равное указанному числу. MSDN system.math.floor
math.truncate()
Вычисляет неотъемлемую часть числа. MSDN system.math.truncate
Math.Floor()
округляет «в сторону отрицательной бесконечности» в соответствии со стандартом IEEE 754, раздел 4.
Math.Truncate()
округляет «до ближайшего целого числа к нулю».
Math.Floor()
Возвращает наибольшее целое число, меньшее или равное указанному числу с плавающей запятой двойной точности.
Math.Round()
: Округляет значение до ближайшего целого числа или до указанного числа дробных цифр.
Floor()
а Truncate()
, а не Floor()
и Round()
.