Python, округляющий проблему

Я столкнулся с очень странной проблемой в Python. (Используя Python 2.4.x)

В окнах:

>>> a = 2292.5
>>> print '%.0f' % a
2293

Но в Солярисе:

>>> a = 2292.5
>>> print '%.0f' % a
2292

Но это - то же в обоих окнах и solaris:

>>> a = 1.5
>>> print '%.0f' % a
2

Кто-то может объяснить это поведение? Я предполагаю, что это - платформа, зависящая от способа, которым был скомпилирован Python?

10
задан King's jester 3 June 2017 в 08:28
поделиться

3 ответа

Функция, в конечном итоге отвечает за выполнение того, что форматирование Pyos_snprintf (см. Источники ). Когда вы поручив, это, к сожалению, зависимое от системных систем, т. Е. Это опирается на vsprintf , vsnprintf или другие аналогичные функции, которые в конечном итоге поставляются библиотекой времени выполнения платформы (я не вспоминаю Если стандарт C ничего не говорит о форматировании «% f» для поплавков, которые являются «именно на полпути» между двумя возможными закругленными значениями ... но, является ли стандарт C LAX об этом, или, скорее, стандарт C строгого, но некоторые C Руководитель разбивает его, в конечном итоге довольно академическая проблема ...).

10
ответ дан 4 December 2019 в 00:24
поделиться

Я зависит от платформы. Вы можете найти документацию здесь .

Это хорошо для пользователя ceil или floor , когда вы знаете, что хотите (округлить в большую или меньшую сторону).

0
ответ дан 4 December 2019 в 00:24
поделиться

round() округляет до ближайшего четного целого числа
"%n.nf" работает так же, как round()
int() усекает до нуля

"округление положительного числа до ближайшего целого
может быть реализовано путем добавления 0.5 и усечения"
-- http://en.wikipedia.org/wiki/Rounding

В Python это можно сделать с помощью: math.trunc( n + 0.5 )
при условии, что n положительно, конечно...

Там, где "округлить половину до четного" не подходит, я теперь использую
math.trunc( n + 0.5 ), где раньше использовал int(round(n))

2
ответ дан 4 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: