Округление
Округле́ние — замена числа на его приближённое значение (с определённой точностью) в определённом разряде, записанное с меньшим количеством значащих цифр [1] . Модуль разности между двумя числами в процессе округления (заменяемое число и заменяющее число) называется ошибкой округления.
- 1 Основные методы округления
- 1.1 Округление к ближайшему целому
- 1.2 Округление к большему
- 1.3 Округление к меньшему
- 1.4 Случайное округление
Основные методы округления
Разные сферы используют разные методы округления. Во всех этих методах лишние знаки до нужного числа отбрасываются — предшествующее корректируется по тому или иному правилу.
Округление к ближайшему целому
Округление к ближайшему целому — наиболее часто используемое округление, при котором число округляется до целого. В общих случаях округление выглядит следующим образом:
- если N+1 знак < 5, то N-й знак сохраняют, а N+1 и все последующие обнуляют;
- если N+1 знак ≥ 5, то N-й знак увеличивают на единицу, а N+1 и все последующие обнуляют;
Округление к большему
Округление к большему работает следующим образом: если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное. В экономическом жаргоне такое округление называется «округление в пользу продавца/кредитора». В Excel и других редакторах таблиц, а также в англоязычных источниках и учебниках по математике данная операция называется «celling» (потолок). Как пример:
Погрешность округления находится в пределах +1 последнего сохраняемого разряда.
Округление к меньшему
Округление к меньшему работает следующим образом: если обнуляемые знаки не равны нулю, предшествующий знак сохраняют, если число положительное, или увеличивают на единицу, если число отрицательное. В жаргоне экономистов такое явление называется «округление в пользу покупателя/дебитора». Англоязычные источники, учебники по математике, а также Excel обозначают это как «floor» (пол). Например:
Погрешность округления — в пределах −1 последнего сохраняемого разряда.
Случайное округление
При случайном округлении округление в большую или меньшую сторону происходит в случайном порядке. Вероятность округления вверх равна дробной части. Этот способ делает накопление ошибок случайной величиной с нулевым математическим ожиданием.
Варианты округления 0,5 к ближайшему целому
Отдельного описания требуют правила округления для специальных случаев, когда (N+1)-й знак = 5 [2] , а последующие знаки равны нулю. Есть следующие варианты правила округления до ближайшего целого для данного случая:
- математическое округление — округление всегда в большую сторону (по модулю); предыдущий разряд всегда будет увеличиваться на единицу;
- округление до ближайшего чётного — число округляют к ближайшему чётному числу соответственно; 2,5 при округлении станет 2, 3,5 станет 4, 1,5 также будет равняться 2;
- случайное округление — числа округляются в случайном порядке в большую или меньшую сторону, но с равной вероятностью (что используется в статистике);
- поочередное округление (чередующееся округление) — числа округляются поочередно в большую или меньшую сторону
Математическое округление имеет довольно фатальный недостаток в виде накопления ошибки округления; это приводит к тому, что значения числа или чисел после процедуры округления становятся больше, и это искажает точность. Например: округление до целых денежных сумм или веса предметов. Если в реестрах строк окажутся значения после запятой, что больше 50, то и итоговая сумма станет на 50 больше.
Остальные три варианта как раз и нужны для того, чтобы ошибка округления не сказалась на точности расчётов. При округлении до ближайшего чётного ошибки округления взаимно погашаются (правда, это верно лишь тогда, когда набор округляемых чисел обладает свойствами случайного ряда).
Два последних варианта предполагают, что одна половина данных будет округлена в другую сторону, а другая — в другую, что повысит точность расчётов. Но и у них есть два недостатка:
- случайное округление требует для каждой строки создавать числа. Для замены каждого числа требуется проводить сложение, деление, умножение и вычитание; если чисел много — то работа с ними сильно замедляется;
- чередующееся округление требует сохранять «флаг», показывающий в какую из сторон было произведено округление в последний раз и при каждом округлении этот самый «флаг» переключать. Если чисел много, что нагрузка из-за вычислительных процессов возрастает, что также замедляет работу со значениями.
Применение
Округление используется в тех случаях, когда точные вычисления произвести не представляется возможным, или можно дальше работать с некоторой погрешностью. Например, абсолютно точно нельзя указать вес сахара в одной чайной ложке — он будет колебаться в зависимости от того, сколько сахара человек зачерпнул; и в таких случаях делают приписку «приблизительно n грамм сахара».
Округление является одним из важнейших статистических инструментов. Как пример: нельзя абсолютно точно выверить количество проживающих в городе людей — естественная миграция, умершие и родившиеся будут влиять на колебания численности жителей. Округление можно применить и для простоты восприятия цифр в графиках, округлив процент респондентов до десятых или сотых долей.
В физике округление применяется для расчёта реальных физических величин, при этом есть определённая специфика применения — расчёт точности идёт до определённой конечной точности, где погрешность будет минимальна [3] .
Ссылки и источники
- ↑Математика с нуля(рус.) . Математика с нуля. Дата обращения: 24 марта 2023.
- ↑ Генри С. Уоррен, мл. Глава 3. Округление к степени 2 // Алгоритмические трюки для программистов = Hacker’s Delight. — М.: «Вильямс», 2007. — С. 288. — ISBN 0-201-91465-4..
- ↑В. М. Заварыкин, В. Г. Житомирский, М. П. Лапчик. Техника вычислений и алгоритмизация. — Просвещение, 1987. — С. 160.
Данная статья имеет статус «готовой». Это не говорит о качестве статьи, однако в ней уже в достаточной степени раскрыта основная тема. Если вы хотите улучшить статью — правьте смело!
- Страницы, использующие волшебные ссылки ISBN
- Наука
- Все статьи
- Математика
- Математические понятия
Осваиваем JS: округление до целого
Часто вычисления дают результаты, которые не соответствуют пределам нужных диапазонов. В результате нужно осуществлять JavaScript округление до определенного значения.
Для чего округлять числа?
JavaScript не хранит целые числа, поскольку их значения представлены в виде цифр с плавающей точкой. Многие дроби не могут быть представлены числом с определенным конечным количеством знаков после запятой, поэтому JavaScript может генерировать результаты, наподобие приведенного ниже:
0.1 * 0.2; > 0.020000000000000004
На практике это не будет иметь никакого значения, поскольку речь идет о погрешности в 2 квинтилионные. Но это может отразиться на результате при работе с числами, которые представляют значения валют, процентов или размер файла. Поэтому нужно сделать JavaScript округление до целых или до определенного знака после запятой.
Округление десятичных чисел
Чтобы « обрезать » десятичное число, используются методы toFixed() или toPrecision() . Они оба принимают один аргумент, который определяет количество значимых и знаков после запятой, которые должны быть включены в результат:
- если для toFixed() аргумент не определен, значение по умолчанию равно 0 , то есть без знаков после запятой; максимальное значение аргумента равно 20 ;
- если для toPrecision() аргумент не задан, число не изменяется.
var randNum = 6.25; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" var randNum = 87.335; randNum.toFixed(2); > "87.33" var randNum = 87.337; randNum.toPrecision(3); > "87.3"
И toFixed() , и toPrecision возвращают округленное строчное представление результата, а не число. Это означает, что прибавление rounded к randNum в результате даст конкатенацию строк, а не одно число:
console.log(randNum + rounded); > "6.256"
Если нужно получить в результате JavaScript округление до сотых, используйте parseFloat() :
var randNum = 6.25; var rounded = parseFloat(randNum.toFixed(1)); console.log(rounded); > 6.3
toFixed() и toPrecision() также являются полезными методами для усечения большого количества знаков после запятой. Это удобно при работе с числами, представляющими денежные единицы:
var wholeNum = 1 var dollarsCents = wholeNum.toFixed(2); console.log(dollarsCents); > "1.00"
Обратите внимание, что если в числе больше знаков, чем задано параметром точности, toPrecision будет выдавать результат в научном формате:
var num = 123.435 num.toPrecision(2); > "1.2e+2"
Как избежать ошибок при округлении десятичных дробей
В некоторых случаях toFixed и toPrecision осуществляют JavaScript округление в меньшую сторону , а не округление в большую сторону:
var numTest = 1.005; numTest.toFixed(2); > 1;
Результатом приведенного выше примера должно быть 1.01, а не 1. Если нужно избежать этой ошибки, я рекомендую использовать экспоненциальные числа:
function round(value, decimals)
round(1.005,2); > 1.01
Если нужно еще более надежное решение, чем округление, оно доступно на MDN .
Округление с помощью эпсилона
Альтернативный метод JavaScript, позволяющий осуществить округление до десятых, был введен в ES6 ( также известном, как JavaScript 2015 ). «Машинный эпсилон» обеспечивает разумный предел погрешности при сравнении двух чисел с плавающей запятой. Без округления, сравнения могут дать результаты, подобные следующим:
0.1 + 0.2 === 0.3 > false
Math.EPSILON может быть использован в функции для получения корректного сравнения:
function epsEqu(x, y)
Функция принимает два аргумента : один содержит вычисления, второй ожидаемый ( округленный ) результат. Она возвращает сравнение этих двух параметров:
epsEqu(0.1 + 0.2, 0.3) > true
Все современные браузеры поддерживают математические функции ES6 . Но если необходимо обеспечить поддержку в старых браузерах, то нужно использовать полифиллы.
Усечение десятичных чисел
Все методы, представленные ранее, выполняют JavaScript округление до десятых . Чтобы усечь положительное число до двух знаков после запятой, умножить его на 100 , усечь снова, а затем полученный результат разделить на 100 , нужно:
function truncated(num) < return Math.trunc(num * 100) / 100; >truncated(3.1416) > 3.14
Если требуется что-то более гибкое, можно воспользоваться побитовым оператором:
function truncated(num, decimalPlaces) < var numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; >
var randInt = 35.874993; truncated(randInt,3); > 35.874
Округление до ближайшего числа
Чтобы осуществить округление до целого , используется Math.round JavaScript :
Math.round(4.3) > 4 Math.round(4.5) > 5
Обратите внимание, что » половинные значения «, такие как .5 , округляются вверх.
Округление в меньшую сторону до ближайшего целого числа
Если вы хотите округлять в меньшую сторону, используйте метод Math.floor() :
Math.floor(42.23); > 42 Math.floor(36.93); > 36
Округление » вниз » имеет одно направление для всех чисел, в том числе и для отрицательных. Это можно представить, как небоскреб с бесконечным количеством этажей, в том числе и ниже уровня фундамента ( представляющих отрицательные числа ). Если вы находитесь в лифте между подвальными этажами 2 и 3 ( что соответствует значению -2.5 ), Math.floor доставит вас на этаж -3 :
Math.floor(-2.5); > -3
Если нужно избежать этого, используйте JavaScript Math округление с помощью Math.trunc() , поддерживаемый во всех современных браузерах ( кроме IE / Edge ):
Math.trunc(-41.43); > -41
Округление в большую сторону до ближайшего целого числа
Если вы хотите округлить десятичные числа вверх, используйте Math.ceil . Действие этого метода также можно представить, как бесконечный лифт: Math.ceil всегда везет вас » вверх «, независимо от того, является ли число отрицательным или положительным:
Math.ceil(42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36.93); -36
Округление до ближайшего кратного числа
Если нужно округлить значение до ближайшего числа, кратного 5 , создайте функцию, которая делит число на 5 , округляет его, а затем умножает результат на то же значение:
function roundTo5(num) < return Math.round(num/5)*5; >
roundTo5(11); > 10
Если нужно выполнить JavaScript округление до двух знаков, можно передавать функции, как начальное число, так и кратность:
function roundToMultiple(num, multiple) < return Math.round(num/multiple)*multiple; >
Чтобы использовать функцию, включите в ее вызов округляемое число и кратность:
var initialNumber = 11; var multiple = 10; roundToMultiple(initialNumber, multiple); > 10;
Чтобы округлять значения только в большую или меньшую сторону замените в функции round на ceil или floor .
Привязка к диапазону
Иногда нужно получить значение х , которое должно находиться в пределах определенного диапазона. Например, нужно значение от 1 до 100 , но мы получаем значение 123 . Чтобы исправить это, можно использовать min() ( возвращает наименьшее из чисел ) и max ( возвращает максимально допустимое число ).
var lowBound = 1; var highBound = 100; var numInput = 123; var clamped = Math.max(lowBound, Math.min(numInput, highBound)); console.log(clamped); > 100;
Можно создать функцию или расширение класса Number :
Number.prototype.clamp = function(min, max) < return Math.min(Math.max(this, min), max); >;
(numInput).clamp(lowBound, highBound);
Округление по Гауссу
Округление по Гауссу (» банковское «, конвергентное или голландское ) представляет собой метод округления без статистической погрешности. Стандартное JavaScript округление иногда дает погрешности в большую сторону. Округление по Гауссу позволяет избежать этой погрешности с помощью округления до ближайшего четного числа. Лучшее решение, которое мне известно:
function gaussRound(num, decimalPlaces) < var d = decimalPlaces || 0, m = Math.pow(10, d), n = +(d ? num * m : num).toFixed(8), i = Math.floor(n), f = n - i, e = 1e-8, r = (f >0.5 - e && f < 0.5 + e) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n); return d ? r / m : r; >
gaussRound(2.5) > 2 gaussRound(3.5) > 4 gaussRound(2.57,1) > 2.6
Десятичные числа в CSS
Так как JavaScript часто используется для получения информации о позиции или преобразования HTML-элементов , то можно задаться вопросом, что произойдет, если мы сгенерируем десятичные значения для элементов:
Современные браузеры поддерживают десятичные значения в блочной модели, в том числе процентные и пиксельные единицы.
Научный форум dxdy
хотел округлить важное число в своей жизни, но не смог этого сделать.
читаю правила по арифметике:Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
и у меня возник интересный, как для не математика, вопрос: а чем нечетные цифры лучше четных? Число котороя я округлял действительно важное, и получается что меня подставила какая-то арифметика, а кому-то она наоборот помогла.
Re: логика математики для биолога
21.07.2008, 01:07
alex_kol писал(а):
и у меня возник интересный, как для не математика, вопрос: а чем нечетные цифры лучше четных?В случае округления — предположу, что потому, что 0 — четное число.
Тип округления к ближайшему четному называется банковским округлением.
Если складывать много чисел, округляя .5 всегда в большую сторону, то возникнет перекос, который будет тем больше, чем больше чисел мы складываем. Банковское округление позволяет минимизировать этот перекос. В этом случае половина округляется к ближайшему четному.
Re: логика математики для биолога
21.07.2008, 01:23
alex_kol писал(а):Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
Честно говоря, никогда этим не интересовался. С моей (сугубо практической) точки зрения — округлять надобно до ближайшего целого, ну а выпадет судьба на пятёрку — так какая разница. Обычно принято округлять в этом случае просто вверх.
Не уверен, что это правило имеет хоть какое-то практическое значение. Но, может, и имеет.
Тогда соотв. теорема должна выглядеть примерно так: при указанном способе округления матожидание результата ближе к истинному значению, чем при том вульгарном, которое я описывал.
Не уверен, что это имеет хоть какое-то практическое значение. И почти уверен: даже эта изысканная оценка не является несмещённой.
Re: логика математики для биолога
21.07.2008, 11:46
alex_kol писал(а):
хотел округлить важное число в своей жизни, но не смог этого сделать.Если это число такое вожное, зачем его округлять?
А сколько цифр в этом числе? Чем больше цифр, тем меньше губительный эффект округления.
Ну а правило округление в арифметике такое: если последней цифрой является 0,1,2,3 или 4, тогда она отбрасывается, если находится в дробной части и меняется на 0, если дробной части нет. Если же это число заканчивается на 5,6,7,8 или 9, тогда выполняется все тоже самое, только предпоследняя цифра исходного числа увеличивается на 1.Re: логика математики для биолога
22.07.2008, 07:40
alex_kol писал(а):Если отбрасывается цифра 5, а за ней нет и никогда не было значащих цифр, то последняя из сохраняемых цифр остаётся неизменной, если она чётная, и увеличивается на 1, если она нечётная.
Скажите, а давно это ввели? Нас вот в школе учили, что когда 5 на конце, то округляется всегда в большую сторону, вне зависимости от чётности или нечётности предыдущей цифры. То есть вот так:
PaulS писал(а):
Ну а правило округление в арифметике такое: если последней цифрой является 0,1,2,3 или 4, тогда она отбрасывается, если находится в дробной части и меняется на 0, если дробной части нет. Если же это число заканчивается на 5,6,7,8 или 9, тогда выполняется все то же самое, только предпоследняя цифра исходного числа увеличивается на 1.
22.07.2008, 10:12
22.07.2008, 10:53
Brukvalub писал(а):Во второй ссылке сказано, что стандарт — это округление первым способом (с учётом чётности/нечётности предыдущей цифры). В третьей ссылке говорится, что стандарт — округление вторым способом (всегда в большую сторону, без учёта чётности/нечётности предпоследней цифры). В первой ссылке (статья из Википедии) указаны оба способа округление, причём округление первым способом называется банковским округлением , а округление вторым способом — математическим округлением (и, насколько я понял, считается стандартным во всех областях, не связанных с банковской деятельностью).
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
22.07.2008, 21:42
Профессор Снэйп в сообщении #134686 писал(а):
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
Именно это я и хотел подчеркнуть ссылками:D
22.07.2008, 22:11
Brukvalub писал(а):
Профессор Снэйп в сообщении #134686 писал(а):
Короче, путаница полная. Единого стандарта, я так понимаю, нет.
Именно это я и хотел подчеркнуть ссылками:DСпособ округления может зависеть от решаемой задачи. Например, оценивая сверху погрешность, полученную оценку можно округлять только в большую сторону, то есть, если оценка показывает, что погрешность меньше 0.5001, и Вам приспичило округлить это число до одной значащей цифры, то округлять нужно до 0.6.
Re: логика математики для биолога
23.07.2008, 13:40Последний раз редактировалось GAA 29.07.2008, 16:23, всего редактировалось 1 раз.
Пусть в системе с основанием выполняется округление числа с
разрядами до числа с
разрядами;
\le x < 1$" />. И пусть числа имеют равные веса. Тогда средняя ошибка округления задается выражением
, — прим. GAA) при любой системе счисления с четным основанием . [1] Очевидно (и об этом говорит wiki: “This method is also known as unbiased rounding ”), при использовании банковского округления средняя ошибка равна нулю .В АЛУ процессоров операции, иногда, выполняются с
разрядами, а при сохранении в регистре округляются до
разрядов. Кроме того, при сохранении (выгрузке результатов в память) в переменные типа double или single вновь происходит округление (округление не происходит при сохранении в переменную типа extended). Так что описанная модель округления, в принципе, имеет смысл. Как модель, так и банковское правило округления, по-моему, имеет некоторое значение не только в банковских, но и в длительных геодезических расчетах с малым числом разрядов (считали раньше вручную). Возможно поэтому, банковское правило называют в естественных науках Гауссовым правилом округления (на русском см., например, [2]).alex_kol писал(а):
. вопрос: а чем нечетные цифры лучше четных?Округление к четному есть договоренность. Очевидно, можно правило изменить и округлять всегда к нечетному числу (это отмечается в [3]). Но так уж договорились.
Refs.
[1] Ильин В.А., Позняк Э.Г. Основы математического анализа. Т.1 — М.: Наука, 1982. Дополнение 2 «Об ошибках в округлении чисел в системе счисления с четным и нечетным основанием» [По-моему, после слов «и мы получим после несложных вычислений, что. » в записи суммы, допущена опечатка , но на результат она не влияет] .
[2] Яворский В.А. Планирование научного эксперимента и обработка экспериментальных данных. Метод. ук. к выполн. лаб. работ — МФТИ, 2006. Раздел 7 «Учет погрешности в записи окончательного результата измерения» [К сожалению текст не особо строгий: при очень беглом прочтении обратил внимание на то, что определения некоторых понятий формулируются без указания того, что такие определения не являются общепринятыми] .
[3] Выгодский М.Я. Справочник по элементарной математике. — М.: Наука, 1979. §35 «Правила округления».
[Добавлено 29.07.08]
В стандарте IEEE-754 имеется четыре режима округления:
1) к ближайшему четному;
2) к нулю;
3) к положительной и отрицательной бесконечности.
Эти режимы поддерживаются, например, сопроцессорами Intel x87 и FPU более поздних процессоров: 486, Pentium.Из раздела 2.2.3 документа INTEL 80387 PROGRAMMER’S REFERENCE MANUAL, 1987:
Rounding occurs in arithmetic and store operations when the format of the destination cannot exactly represent the infinitely precise true result. For example, a real number may be rounded if it is stored in a shorter real format, or in an integer format. Or, the infinitely precise true result may be rounded when it is returned to a register.The NPX [Numeric Processor Extension] has four rounding modes, selectable by the RC field in the control word (see Figure 2-3). Given a true result b that cannot be represented by the target data type, the 80387 determines the two representable numbers a and c that most closely bracket b in value (a < b < c). The processor then rounds (changes) b to a or to c according to the mode selected by the RC field as shown in Table 2-5. Rounding introduces an error in a result that is less than one unit in the last place to which the result is rounded.
1. «Round to nearest» is the default mode and is suitable for most applications; it provides the most accurate and statistically unbiased estimate of the true result.
2. The «chop» or «round toward zero» mode is provided for integer arithmetic applications.
3. «Round up» and «round down» are termed directed rounding and can be used to implement interval arithmetic. Interval arithmetic generates a certifiable result independent of the occurrence of rounding and other errors. The upper and lower bounds of an interval may be computed by executing an algorithm twice, rounding up in one pass and down in the other.Из раздела 3.2.2 документа Intel387™ SX MATH COPROCESSOR, 1995:
The rounding control (RC) field (bits 11–10) provide for directed rounding and true chop, as well as the unbiased round to nearest even mode specified in the IEEE standard. Rounding control affects only those instructions that perform rounding at the end of the operation (and thus can generate a precision exception); namely, FST, FSTP, FIST, all arithmetic instructions (except FPREM, FPREM1, FXTRACT, FABS, and FCHS) and all transcendental instructions.Для иллюстрации выполним такой пример (Turbo Pascal 7, Delphi 5):
{$N+} {NPU On}
Var
s: single;
begin
s:= -3/2; writeln(‘Round(-1.5)=’, Round(s));
s:= -1/2; writeln(‘Round(-0.5)=’, Round(s));
s:= +1/2; writeln(‘Round(+0.5)=’, Round(s));
s:= +3/2; writeln(‘Round(+1.5)=’, Round(s));
end.Результат выполнения (TP7, Delphi на Intel Pentium III, AMD Athlon 64): -2, 0, 0, 2.
Т.е., действительно, выполняется округление к ближайшему четному (режим округления по умолчанию).Просмотр ассемблерного кода в отладчике показывает, по существу, в TP7 округление реализуется загрузкой вещественной переменной в стек FPU и последующим сохранением целого в ячейке памяти:
1) fld s (загрузка переменной типа single в вершину стека перед вызовом Round)
2) fistp dword ptr [xxxx] (выгрузка целого во временную переменную по адресу [xxxx])
Другими словами округление осуществляет инструкцией fistp.28.07.2008, 16:10
alex_kol
Это так называемое «банковское округление». Оно введено для того, чтобы при округлении не возникало систематического завышения или занижения результата.
Если считать все последние цифры равновероятными, то у нас есть 4 цифры (1, 2, 3, 4), для которых округляют в меньшую сторону, 4 цифры (6, 7, 8, 9), для которых округляют в большую сторону и цифра 5. Если округлять числа, заканчивающиеся на «5», в бОльшую сторону, то в бОльшую сторону будет округляться 5 из 9 случаев округления, и результат будет завышаться. Если в меньшую — то 5 и 9 случаев будут представлять занижение. Это неустранимая проблема, поскольку вариантов нечётное число, 9. Разрешением её было бы округлять «5» иногда в большую, иногда в меньшую сторону с равной вероятностью. Но если предоставить это выбору вычисляющего, он может (не забываем, что это банковское округление) искажать результат в свою пользу. Поэтому предпоследняя цифра играет роль «генератора случайных чисел», если она нечётна — то округляют в бОльшую, чётна — в меньшую сторону. Так избавляются и от систематического искажения, и от возможности мошенничества. Для не-финансовых расчётов чаще применяют более простое правило, всегда округляя «5» в бОльшую сторону.28.07.2008, 16:48
Евгений Машеров писал(а):alex_kol
Разрешением её было бы округлять «5» иногда в большую, иногда в меньшую сторону с равной вероятностью.Писал как то прогу ( денежки делили). Ну вот порешили сообща, что такие «ошибки» списывать на определенный счет. Все про него знали и никому обидно не было
Страница 1 из 1 [ Сообщений: 12 ] Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей
Округление числа до заданного числа знаков после запятой
Как в Python округлить число до заданного числа знаков после запятой?
round(число, знаков) — не работает.
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:Квадратный корень введенного с клавиатуры числа, с точностью до трех знаков после запятой
Помогите пожалуйста Напишите программу, которая вычисляет квадратный корень введенного с.
Округление числа до 2 знаков после запятой
Буду очень признательна, если кто-то подскажет, как написать программу, округляющую число до двух.
Округление числа до 4 знаков после запятой
При табуляции как сделать при Y, чтобы после запятой было 4 знака?Округление числа до двух знаков после запятой
Всем привет. Подскажите, пожалуйста, как сделать. Умножаю число на 1024. Числа может быть.2768 / 1241 / 447
Регистрация: 21.11.2021
Сообщений: 2,550
Сообщение от КулХацкеръ 
round(число, знаков) — не работает.
А почему не работает-то?
702 / 348 / 104
Регистрация: 09.02.2018
Сообщений: 7891 2 3 4 5 6 7 8 9
def true_round(number, ndigits=None): return round(number, ndigits) assert true_round(0.5) == 1 assert true_round(1.5) == 2 assert true_round(2.5) == 3 assert true_round(0.05, 1) == 0.1 assert true_round(0.15, 1) == 0.2 assert true_round(0.25, 1) == 0.3
Как сделать, чтобы проходили assert’ы?
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
Я сначала подумал, что вопрос шуточный.
А ведь и правда, как-то странно себя ведет1 2 3 4
a = 1.5 c = 2.5 print(round(a)) print(round(c))
Добавлено через 4 минуты
round(x) — это округление числа до целого, которое расположено ближе всего. Если дробная часть равна 0,5, то округляют до ближайшего четного значения.
round(x, n) — данные х округляют до n знаков после точки. Если округление проходит до сотых, то n равен «2», если до тысячных — «3» и т.д.Добавлено через 2 минуты
В Python 3 используются принципы банковского округления. Это означает, что преобразование производится к ближайшему четному. В таком случае также не удается полностью избежать возникающих ошибок, но программисты добиваются точности в подсчетах.2,5 по правилам банковского преобразования будет равно 2, а 3,5 = 4 (значения возводятся к близкому четному). Минимизировать погрешности можно благодаря практически равной вероятности, что перед пятеркой будет четное или нечетное число.
