Вопрос

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

Нет правильного решения

Другие советы

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

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

Смотрите также: Ответ Пакса Диабло.Настоятельно рекомендуется!

Перейдите по этим ссылкам, чтобы просмотреть описания 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

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(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 может оказаться не таким, как вы ожидаете.

Чтобы получить «стандартный» результат округления, используйте:

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() раунды «к негативной бесконечности» в соответствии с Стандарт IEEE 754 раздел 4.

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

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(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 слиииид влево...
Math.ceil слиииид вправо...
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():Возвращает наибольшее целое число, меньшее или равное указанному числу двойной точности с плавающей запятой.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top