Яка різниця між Math.Floor()
і Math.Truncate()
.NET?
Яка різниця між Math.Floor()
і Math.Truncate()
.NET?
Відповіді:
Math.Floor
округляє вниз, Math.Ceiling
округляє вгору і Math.Truncate
округляє до нуля. Таким чином, Math.Truncate
це як Math.Floor
для додатних чисел, так і Math.Ceiling
для негативних чисел. Ось посилання .
Для повноти Math.Round
округляйте до найближчого цілого числа. Якщо число знаходиться в середині між двома цілими числами, то воно округляється до парного. Довідково.
Дивіться також: Відповідь Пакса Діабло . Настійно рекомендується!
(int)myDouble
відрізняється від (int)Math.Truncate(myDouble)
?
Перейдіть за цими посиланнями для описів 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
як властивість кінцевої цифри в округляється цифра, а не в тому сенсі , весь число повинне бути кратне двом. До речі, шкода пройшло так довго, щоб повернутися до вас, сподіваюся, ви не просто сиділи навколо, чекаючи моєї відповіді :-)
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
sliiiide ліворуч ...
Math.ceil
sliiiide праворуч ...
Math.truncate
criiiiss crooooss (підлога / стеля завжди у напрямку до 0)
Math.round
cha cha, справжній гладкий ... (перейти до найближчої сторони)
Ходімо на роботу! (⌐ □ _ □)
Ліворуч ... Math.floor
Візьміть це вже зараз ... --
Два хмелі цього разу ...-=2
Всі плескайте в руки
Як низько можна піти? Чи можна спуститися низько? Весь шлях до floor
?
if (this == "wrong")
return "i don't wanna be right";
Math.truncate(x)
також те саме, що int(x)
.
видаливши позитивну чи негативну частку, ви завжди прямуєте до 0.
Вони функціонально еквівалентні додатним числам. Різниця полягає в тому, як вони обробляють від’ємні числа.
Наприклад:
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
PS Остерігайтеся 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 () проти 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 754 розділу 4.
Math.Truncate()
округляє "до найближчого цілого числа до нуля".
Math.Floor()
: Повертає найбільше ціле число, менше або рівне вказаному номеру з плаваючою комою подвійної точності.
Math.Round()
: Обводить значення на найближче ціле число або на вказану кількість дробових цифр.
Floor()
а Truncate()
не Floor()
і Round()
.