Сведения о вопросе

Henry

16:03, 1st July, 2020

Теги

.net   math    

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

Просмотров: 476   Ответов: 7

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



  Сведения об ответе

darknet

18:03, 1st July, 2020

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

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

Смотрите также: ответ Pax Diablo . Очень рекомендую!


  Сведения об ответе

crush

18:03, 1st July, 2020

Следуйте по этим ссылкам для 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


  Сведения об ответе

VERSUION

18:03, 1st July, 2020

Math.Floor() раундов в сторону отрицательной бесконечности

Math.Truncate округляет вверх или вниз до нуля.

Например:

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

в то время как

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


  Сведения об ответе

PROGA

18:03, 1st July, 2020

Примеры:

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


  Сведения об ответе

прога

18:03, 1st July, 2020

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

Например:

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. Остерегайтесь Math.Round это может быть не то, что вы ожидаете.

Для получения результата округления "standard" используйте:

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


  Сведения об ответе

DINO

18:03, 1st July, 2020

Math.Floor() раундов "toward negative infinity" в соответствии со стандартом IEEE 754 раздел 4.

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


  Сведения об ответе

piter

18:03, 1st July, 2020

math.floor()

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

MSDN system.math.floor

math.truncate()

Вычисляет интегральную часть числа.

MSDN system.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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться