Разница между Math.Floor () и Math.Truncate ()

В чем разница между Math.Floor() и _ 2_ в .NET?


person Anonymous User    schedule 01.08.2008    source источник
comment
например Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5   -  person subramani    schedule 14.12.2011


Ответы (13)


Math.Floor округляет в меньшую сторону, Math.Ceiling округляет в большую сторону и Math.Truncate округляет до нуля. Таким образом, Math.Truncate похоже на Math.Floor для положительных чисел и на Math.Ceiling для отрицательных чисел. Вот справочник.

Для полноты Math.Round округляется до ближайшего целого числа. Если число находится точно посередине между двумя целыми числами, оно округляется до четного. Справочник.

См. Также: ответ Pax Diablo. Настоятельно рекомендуется!

person Chris Jester-Young    schedule 01.08.2008
comment
@Chris, я предлагаю вам исправить свое описание Round, есть два способа округления (AwayFromZero и ToEven), и оно не округляется до ближайшего целого числа, поскольку оно также может выполнять дробное округление. - person paxdiablo; 24.02.2009
comment
Итак, небольшое добавление к исходному вопросу - в чем разница между Math.Truncate и простым приведением десятичной или двойной дроби к int? не будет ли оно также просто округлено к нулю? - person Noam Gal; 19.05.2009
comment
Когда (int)myDouble отличается от (int)Math.Truncate(myDouble)? - person mpen; 17.06.2012
comment
Чему равно (int) в математическом классе? - person Lei Yang; 18.07.2016

Перейдите по этим ссылкам, чтобы просмотреть описания 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
person paxdiablo    schedule 24.02.2009
comment
Пакс, я думаю, у вас ошибка: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0,0 и т. Д. - person dtroy; 05.05.2009
comment
Спасибо, @dtroy, у меня никогда не было необходимости использовать этот режим, и, хотя я правильно задокументировал его, если текст, я полностью ошибся в примерах. Надеюсь, теперь это исправлено. - person paxdiablo; 05.05.2009
comment
Извините, что комментирую такой старый вопрос, но я должен спросить: как можно округлить ToEven до двух знаков после запятой? Неужто нечетное и четное применимо только к целым числам? - person Richiban; 20.11.2014
comment
@Richiban, думайте о 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
person Azhar    schedule 19.07.2011

Некоторые примеры:

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
person Marek Grzenkowicz    schedule 05.08.2008

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).
удаляя положительную или отрицательную дробь, вы всегда приближаетесь к нулю.

person Puddle    schedule 11.02.2018

Они функционально эквивалентны положительным числам. Разница в том, как они обрабатывают отрицательные числа.

Например:

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
person Sandesh    schedule 02.01.2015

Попробуйте это, Примеры:

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

person safin chacko    schedule 12.02.2016

Math.Floor() округляет «в сторону отрицательной бесконечности» в соответствии с IEEE Standard 754 раздел 4.

Math.Truncate() округляет "до ближайшего целого числа к нулю".

person Community    schedule 07.06.2012

Math.Floor(): возвращает наибольшее целое число, меньшее или равное указанному числу с плавающей запятой двойной точности.

Math.Round(): округляет значение до ближайшего целого числа или до указанного количества дробных цифр.

person Pinky    schedule 19.09.2013
comment
OP спросил о разнице между Floor() и Truncate(), а не Floor() и Round(). - person Robert Columbia; 11.11.2017

Math.floor() всегда округляется в меньшую сторону, т. е. возвращает МЕНЬШЕ целого числа. round() вернет БЛИЖАЙШЕЕ целое число

math.floor ()

Возвращает наибольшее целое число, меньшее или равное указанному числу.

math.truncate ()

Вычисляет целую часть числа.

person vidy    schedule 17.07.2018

Math.Floor ():

Он дает наибольшее целое число, меньшее или равное заданному числу.

    Math.Floor(3.45) =3
    Math.Floor(-3.45) =-4

Math.Truncate ():

Удаляет десятичные знаки числа и заменяет их на ноль.

Math.Truncate(3.45)=3
 Math.Truncate(-3.45)=-3

Также из приведенных выше примеров мы видим, что пол и усечение одинаковы для положительных чисел.

person Anonymous    schedule 24.06.2020

Truncate удаляет десятичную точку.

person Paul Moore    schedule 22.03.2020

Следуя математическому определению пола, то есть наибольшему целому числу, меньшему или равному числу, это совершенно однозначно, тогда как Truncate просто удаляет дробную часть, что эквивалентно округлению до 0.

person Abhishek Choudhary    schedule 28.11.2020