В чем разница между Math.Floor() и _ 2_ в .NET?
Разница между Math.Floor () и Math.Truncate ()
Ответы (13)
Math.Floor округляет в меньшую сторону, Math.Ceiling округляет в большую сторону и Math.Truncate округляет до нуля. Таким образом, Math.Truncate похоже на Math.Floor для положительных чисел и на Math.Ceiling для отрицательных чисел. Вот справочник.
Для полноты Math.Round округляется до ближайшего целого числа. Если число находится точно посередине между двумя целыми числами, оно округляется до четного. Справочник.
См. Также: ответ Pax Diablo. Настоятельно рекомендуется!
(int)myDouble отличается от (int)Math.Truncate(myDouble)?
- person mpen; 17.06.2012
Перейдите по этим ссылкам, чтобы просмотреть описания 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 как о свойстве последней цифры в округленном числе, а не как о том, что все число должно быть кратным двум. Между прочим, извините, что так долго возвращались к вам, надеюсь, вы не просто сидели и ждали моего ответа :-)
- person paxdiablo; 05.08.2015
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 sloiiide слева ... Math.ceil sloiiide справа ... Math.truncate criiiiss crooooss (пол / потолок всегда в сторону 0) Math.round cha cha, очень гладко ... (go к ближайшей стороне)
За работу! (⌐ □ _ □)
Слева ... Math.floor
Верните его сейчас же ... --
На этот раз два прыжка ... -=2
Все хлопают в ладоши ✋✋
Как низко ты можешь пасть? Можете ли вы спуститься низко? Вплоть до floor?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x) также совпадает с int(x).
удаляя положительную или отрицательную дробь, вы всегда приближаетесь к нулю.
Они функционально эквивалентны положительным числам. Разница в том, как они обрабатывают отрицательные числа.
Например:
Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2
Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2
Ссылки MSDN: - Math.Floor Method - Метод 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
Попробуйте это, Примеры:
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 Standard 754 раздел 4.
Math.Truncate() округляет "до ближайшего целого числа к нулю".
Math.Floor(): возвращает наибольшее целое число, меньшее или равное указанному числу с плавающей запятой двойной точности.
Math.Round(): округляет значение до ближайшего целого числа или до указанного количества дробных цифр.
Floor() и Truncate(), а не Floor() и Round().
- person Robert Columbia; 11.11.2017
Math.floor() всегда округляется в меньшую сторону, т. е. возвращает МЕНЬШЕ целого числа. round() вернет БЛИЖАЙШЕЕ целое число
math.floor ()
Возвращает наибольшее целое число, меньшее или равное указанному числу.
math.truncate ()
Вычисляет целую часть числа.
Math.Floor ():
Он дает наибольшее целое число, меньшее или равное заданному числу.
Math.Floor(3.45) =3
Math.Floor(-3.45) =-4
Math.Truncate ():
Удаляет десятичные знаки числа и заменяет их на ноль.
Math.Truncate(3.45)=3
Math.Truncate(-3.45)=-3
Также из приведенных выше примеров мы видим, что пол и усечение одинаковы для положительных чисел.
Truncate удаляет десятичную точку.
Следуя математическому определению пола, то есть наибольшему целому числу, меньшему или равному числу, это совершенно однозначно, тогда как Truncate просто удаляет дробную часть, что эквивалентно округлению до 0.