например, Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
subramani
3
вам действительно нужно это после 10 лет странно? LOL
L_Church
1
почему через 10 лет есть щедрость? уже есть много ответов. есть что-то, чего я здесь не хватает?
Лужа
3
Этот парень задал только 1 вопрос и покинул сайт с тех пор. Я думаю, это все, что он всегда хотел знать ..: D
Никос
Ответы:
484
Math.Floorокругляет, Math.Ceilingокругляет и Math.Truncateокругляет до нуля. Таким образом, Math.Truncateэто как Math.Floorдля положительных чисел, и как Math.Ceilingдля отрицательных чисел. Вот ссылка .
Для полноты Math.Roundокругляем до ближайшего целого числа. Если число находится точно посередине между двумя целыми числами, то оно округляется до четного. Ссылка.
@ Крис, я предлагаю вам исправить описание Раунда, есть два способа округления (AwayFromZero и ToEven), и он не округляется до ближайшего целого числа, поскольку он также может выполнять дробное округление.
paxdiablo
1
Итак, короткое добавление к исходному вопросу - в чем разница между Math.Truncate и простым приведением десятичного числа или двойного к int? не будет ли это также просто к нулю?
Ноам Гал
8
Когда (int)myDoubleотличается от (int)Math.Truncate(myDouble)?
mpen
2
Чему равен (int) класс Math?
Лэй Ян
386
Перейдите по этим ссылкам для описания MSDN:
Math.Floor, который округляется в сторону отрицательной бесконечности.
Math.Ceiling, который округляется в сторону положительной бесконечности.
Math.Truncate, который округляется вверх или вниз к нулю.
Math.Round, который округляется до ближайшего целого или указанного числа десятичных знаков. Вы можете указать поведение, если оно точно равноудалено между двумя возможностями, такими как округление, чтобы конечная цифра была четной (" Round(2.5,MidpointRounding.ToEven)" становится 2) или чтобы она была дальше от нуля (" Round(2.5,MidpointRounding.AwayFromZero)" стала 3).
Следующая диаграмма и таблица могут помочь:
-3-2-10123+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8===========================Floor-3-1012Ceiling-20123Truncate-20012Round(ToEven)-30023Round(AwayFromZero)-3-1023
Обратите внимание, что 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
Пакс, я думаю, у тебя ошибка с: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0.0 и т. Д.
dtroy
1
Спасибо, @dtroy, у меня никогда не было необходимости использовать этот режим, и, хотя я правильно задокументировал его, если текст, я полностью ошибся в примерах. Надеюсь, это исправлено.
paxdiablo
Извините за комментарий к такому старому вопросу, но я должен спросить: как вы можете округлить «ToEven» до двух десятичных знаков? Конечно, странно и даже применимо только к целым числам?
Ричибан
4
@Richiban, представьте, evenчто это свойство последней цифры округленного числа, а не значение целого числа , кратного двум. Кстати, извините, что так долго возвращался к вам, надеюсь, вы просто сидели без дела, ожидая моего ответа :-)
paxdiablo
62
Math.Floor() округляет в сторону отрицательной бесконечности
Math.floorsliiiide влево ... Math.ceilsliiiide вправо ... Math.truncatecriiiiss 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.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).Следующая диаграмма и таблица могут помочь:
Обратите внимание, что
Round
он намного мощнее, чем кажется, просто потому, что он может округляться до определенного количества десятичных знаков. Все остальные всегда округляются до нуля. Например:С другими функциями вы должны использовать умножение / деление для достижения того же эффекта:
источник
even
что это свойство последней цифры округленного числа, а не значение целого числа , кратного двум. Кстати, извините, что так долго возвращался к вам, надеюсь, вы просто сидели без дела, ожидая моего ответа :-)Math.Floor()
округляет в сторону отрицательной бесконечностиMath.Truncate
округляется вверх или вниз до нуля.Например:
пока
источник
Некоторые примеры:
источник
Math.floor
sliiiide влево ...Math.ceil
sliiiide вправо ...Math.truncate
criiiiss crooooss (этаж / потолок всегда в направлении 0)Math.round
ча-ча-ха, очень гладко ... (перейти к ближайшей стороне)Пошли на работу! (⌐ □ _ □)
Слева ...
Math.floor
Забери это сейчас, все ...
--
Два прыжка на этот раз ...
-=2
Все хлопают в ладоши ✋✋
Как низко ты можешь пасть? Вы можете пойти вниз? Весь путь к
floor
?Math.truncate(x)
тоже самое что иint(x)
.удаляя положительную или отрицательную дробь, вы всегда движетесь к 0.
источник
Они функционально эквивалентны с положительными числами. Разница в том, как они обрабатывают отрицательные числа.
Например:
MSDN ссылки: - Math.Floor метод - Math.Truncate метод
PS Остерегайтесь Math.Round это может быть не то, что вы ожидаете.
Чтобы получить «стандартный» результат округления, используйте:
источник
Попробуйте это, Примеры:
Math.Floor () против Math.Truncate ()
Также Math.Round ()
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()
.Math.floor()
всегда будет округляться, т. е. возвращает меньшее целое число. Покаround()
вернет БЛИЖАЙШЕЕ целое числоMath.floor ()
Возвращает наибольшее целое число, меньшее или равное указанному числу.
math.truncate ()
Вычисляет неотъемлемую часть числа.
источник
Обрезать капли десятичной дроби ****
источник