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

Перейдите по этим ссылкам, чтобы math просмотреть описания MSDN:

  • Math.Floor, который округляет до отрицательной бесконечности.
  • Math.Ceiling, который округляет до положительной бесконечности.
  • Math.Truncate, который округляет в большую или меньшую сторону до нуля.
  • Math.Round, который округляет до ближайшего целого числа или указанного количества десятичных знаков. Вы можете указать поведение, если оно точно равноудалено между двумя вариантами, например округление, чтобы последняя цифра была четной («Round(2.5,MidpointRounding.ToEven)» стала 2) или чтобы она дальше от нуля («Round(2.5,MidpointRounding.AwayFromZero)» стала 3).

Следующая .net диаграмма и таблица могут maths помочь:

-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

Обратите внимание, что .net-framework Round намного мощнее, чем кажется, просто maths потому, что он может округлять mathematical до определенного количества maths десятичных знаков. Все остальные .net-framework числа всегда округляются maths до нуля. Например:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

С другими maths функциями вы должны использовать maths уловку умножения / деления dot-net для достижения того же эффекта:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

.net

math

2022-10-21T12:06:20+00:00