Округление чисел и его особенности
Округлением чисел в Python занимается встроенная функция round.
round(number[, ndigits]) — округляет число number до ndigits знаков после запятой (по умолчанию, до нуля знаков, то есть, до ближайшего целого)
Со школы многие привыкли, что, когда (N + 1) знак = 5, а последующие знаки равны нулю, округление производится всегда в большую по модулю сторону.
Однако, как видно из примеров, в Python это не так. Здесь используется так называемое "Банковское округление", то есть округление к ближайшему чётному.
На практике это оказывается не так уж и важно, например:
Что-то не так, правда? На самом деле, всё именно так, как и задумывалось. Просто из-за проблем с точностью чисел с плавающей точкой это число чуть больше, чем 2.85, а потому округляется до 2.9.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Как вывести результат 1 / 3 без округления?
Читаю книгу Лутца (Изучаем, 4-изд). Приммерах показано что что при вводе 1 / 3.0 автоматический вывод
0.33333333333333331
Для округление
(0.333333333333) используется print.
В моем случае выходит
0.3333333333333333 (так же как и с print) Функция repr вроде бы должна помочь но выводит
0.3333333333333333
Как вывести максимально точно результат ?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как получить результат без округления и сокращения
Подскажите пожалуйста, как получить результат без округления и сокращения? a =.
Получить результат вычисления с точностью до сотых без округления
как присвоить некоторой переменной результат вычисления, что бы он был с точностью до сотых, при.
Как вывести в консоль переменную double, ограничив ее длину до 4 знаков после запятой, без округления
Как вывести в консоль переменную double, ограничив ее длину до 4 знаков после запятой, без.
Вывести double без округления
Рассматриваю пример. public string Square(int a = 13, int h = 3) < double.
561 / 484 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
L_L, используйте round.
1 2 3 4 5 6 7
>>> help(round) round(number[, ndigits]) -> floating point number Round a number to a given precision in decimal digits (default 0 digits). This always returns a floating point number. Precision may be negative. >>> round(1/3.0, 3) 0.333
Можно ли в Python во float отбросить k знаков после запятой?
Здравствуйте, вопрос следующий.
Допустим, есть число 17.212123445.
А нужно записать в память только первую цифру после запятой. Каким образом сделать это при помощи вещественных и целочисленных операций?
- Вопрос задан более трёх лет назад
- 152502 просмотра
1 комментарий
Простой 1 комментарий

Попробуйте через ф-ию round(укажите сколько значков после запятой надо вывести)
>>>a=5.4323321
>>>a.__round__(2)
5.43
>>>a
5.4323321
>>>a.__round__(4)
5.4323
Решения вопроса 1
ненавижу javascript
>>> a=13.946 >>> print(a) 13.946 >>> print("%.2f" % a) 13.95
Ответ написан более трёх лет назад
Нравится 15 10 комментариев
Timebird @Timebird Автор вопроса
Не совсем, тем не менее, спасибо за ответ, это я некорректно вопрос сформулировал, видимо.
Нужно не выводить на печать последние две цифры, а хранить в памяти число с двумя последними цифрами
ну не вопрос допишите b = float("%.2f" % a)
Timebird @Timebird Автор вопроса
Спасибо, работает. 🙂
Timebird: Ты только не делай так. Для таких случаев есть Decimal.
Roman Kitaev: это норм способ, decimal тянуть для такой задачи оверхед)
Михаил: Ты не знаешь ведь задачу) Вдруг, он там деньги считает?

О_о вместо того чтоб воспользоваться хотя бы функцией round для округления до нужной точности, вы серьёзно предлагаете сначала преобразовать в строку а потом обратно в число?
Roman Kitaev: тогда мой вариант может стать причиной того что баланс не сойдется))
Артём Клименко: да мне похеру, я могу и scipy зафигачить чтоб число округлить, и да, я предлогаю именно это, потому что это самый что ни на есть стандартнейший способ, быстро сделать то что в ввопросе описано, и при этом следующий прогер который будет это читать сразу поймет о чем речь. а не будет ебсти себе мозг чо там у нас раунд возвращает, да и приведение в строку и обрато способ куда шустрей по ресурсам)

Михаил: round - стандартная bult-in функция, существующая для выполнения конкретной задачи, именно она и является стандартным способом, впрочем, таки да, вы не обязаны со мной соглашаться, но указанный вами способ вызывает у меня стойкое чувство жжения в районе поясницы.
З.Ы. if len(str(bool(a))) == 4:
Форматирование строк с округлением вниз?
Допустим есть переменная balance
balance = 1.237
И есть строка s
s = "Balance: "
print(s.format(balance=balance)) #1.24
Есть ли возможность форматировать строки так, чтобы числа округлялись вниз? Или без предварительной обработки передаваемых параметров это невозможно? Готов рассмотреть костыльные варианты с заменой дефолтной функции форматирования/округления на свою
- Вопрос задан более двух лет назад
- 93 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 2
Можно вот так сделать:
Ответ написан более двух лет назад
youngtitanium @youngtitanium
Арсений Куликов @klkvr Автор вопроса
У меня есть своя функция для округления чисел. У меня около 100 различных строк для форматирования (в некоторых по 4 значения) и мне интересно, чтобы каждая форматировалась округляя вниз. В строках для форматирования функции не работают, а каждый элемент, который подставляется округлять своей функцией затруднительно, это последнее, что я хочу сделать
youngtitanium,
int(1.119999999999999999/100)*100 = 1.12, а по условиям задачи надо 1.11.
Арсений Куликов, можно тогда вместо float использовать decimal, как тут советуют ниже. Можно было бы ещё определить свой потомок float с кастомным оператором __str__, но тогда, скорее всего, усилий по приведению чисел к этому классу будет гораздо больше, чем исправлений форматных строк.
У меня есть своя функция для округления чисел. В строках для форматирования функции не работают
Используйте F-strings. Там функции работают
balance = 1.237 s = f"Balance: " print(s)
Ответ написан более двух лет назад
Арсений Куликов @klkvr Автор вопроса
про f-strings тоже знаю. Я храню шаблоны в отдельном файле, что исключает их использование
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
Почему не проходит код для решения задачи на leetcode?
- 1 подписчик
- 4 минуты назад
- 4 просмотра

- Python
- +1 ещё
Почему текстовый редактор и консоль по-разному присваивают ссылки на переменные Python?
- 1 подписчик
- 26 минут назад
- 9 просмотров
