вокруг (), кажется, не округляется правильно

Документация для раунда () функция указывает о передаче его число и положения мимо десятичного числа к раунду. Таким образом это должно сделать это:

n = 5.59
round(n, 1) # 5.6

Но в действительности закрадывается старая добрая странность с плавающей точкой, и Вы добираетесь:

5.5999999999999996

В целях UI я должен отобразиться 5.6. Я ввел по абсолютному адресу вокруг Интернета и нашел некоторую документацию, что это зависит от моей реализации Python. К сожалению, это происходит и в моем Windows dev машина и в каждом сервере Linux, который я попробовал. Посмотрите здесь также.

За исключением создания моей собственной круглой библиотеки, там какой-либо путь вокруг этого?

114
задан martineau 28 September 2019 в 16:43
поделиться

0 ответов

Я не могу помочь способу, которым это хранится, но по крайней мере форматирующие работы правильно:

'%.1f' % round(n, 1) # Gives you '5.6'
97
ответ дан Peter Mortensen 24 November 2019 в 02:31
поделиться

Что относительно:

round(n,1)+epsilon
-4
ответ дан chown 24 November 2019 в 02:31
поделиться

printf сосунок.

print '%.1f' % 5.59  # returns 5.6
3
ответ дан Jason Navarrete 24 November 2019 в 02:31
поделиться

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

5
ответ дан spoulson 24 November 2019 в 02:31
поделиться

Можно использовать оператор % формата строки, подобный sprintf.

mystring = "%.2f" % 5.5999
3
ответ дан nlucaroni 24 November 2019 в 02:31
поделиться

Можно переключить тип данных на целое число:

>>> n = 5.59
>>> int(n * 10) / 10.0
5.5
>>> int(n * 10 + 0.5)
56

И затем отображают число путем вставки десятичного разделителя локали.

Однако ответ Jimmy лучше.

7
ответ дан Peter Mortensen 24 November 2019 в 02:31
поделиться

Вы добираетесь '5.6', если Вы делаете str(round(n, 1)) вместо всего round(n, 1).

13
ответ дан Tomi Kyöstilä 24 November 2019 в 02:31
поделиться

round(5.59, 1) хорошо работает. Проблема состоит в том, что 5.6 не может быть представлен точно в двоичной плавающей точке.

>>> 5.6
5.5999999999999996
>>> 

, Поскольку Vinko говорит, можно использовать строковое форматирование, чтобы сделать округление для дисплея.

Python имеет модуль для десятичной системы исчисления при необходимости в этом.

20
ответ дан Will Harris 24 November 2019 в 02:31
поделиться

Форматирование работ правильно даже, не имея необходимость к раунду:

"%.1f" % n
100
ответ дан Don Kirkby 24 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

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