«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему округление с плавающей запятой дает ровные результаты?

Почему округление с плавающей запятой дает ровные результаты?

Опубликовано 4 ноября 2024 г.
Просматривать:820

Why Does Float Rounding Surprise with Even Results?

Дилемма округления до половины числа с плавающей запятой

Сталкиваетесь со странностью в функции round()? Обратите внимание на следующее поведение:

for i in range(1, 15, 2):
    n = i / 2
    print(n, "=>", round(n))

Можно было ожидать, что плавающие значения будут последовательно округляться в большую сторону, однако они неожиданно округляются до ближайшего четного числа.

Причина поведения

Документация числовых типов поясняет это своеобразное поведение с помощью утверждения «round(x[, n]) x округлено до n цифр, округление половины до даже." Это известно как банкирское округление. Вместо постоянного округления в большую или меньшую сторону, которое приводит к увеличению ошибок округления, банковское округление компенсирует это, ориентируясь на ближайшее четное число.

Решение для контролируемого округления

Для точного округления , используйте десятичный модуль. Этот модуль предоставляет вам возможность указать конкретные стратегии округления. Например, чтобы округлить половину в большую сторону:

>>> from decimal import localcontext, Decimal, ROUND_HALF_UP
>>> with localcontext() as ctx:
...     ctx.rounding = ROUND_HALF_UP
...     for i in range(1, 15, 2):
...         n = Decimal(i) / 2
...         print(n, '=>', n.to_integral_value())
...
0.5 => 1
1.5 => 2
2.5 => 3
3.5 => 4
4.5 => 5
5.5 => 6
6.5 => 7
Заявление о выпуске Эта статья перепечатана по адресу: 1729151236. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3