Печатать float до n знаков после запятой, включая конец 0
Мне нужно напечатать или преобразовать число с плавающей запятой в 15-значную десятичную строку, даже если результат имеет много конечных 0, например:
1.6 становится 1.6000000000000000
Я попытался округлить (6.2,15), но он возвращает 6.2000000000000002, добавив ошибку округления
Я также видел в сети разных людей, которые помещали float в строку, а затем добавляли трейлинг 0 вручную, но это кажется плохим...
Каков наилучший способ сделать это?
Ответы
Ответ 1
Для версий Python в 2. 6+ и 3.x
Вы можете использовать метод str.format
. Примеры:
>>> print('{0:.16f}'.format(1.6))
1.6000000000000001
>>> print('{0:.15f}'.format(1.6))
1.600000000000000
Обратите внимание, что 1
в конце первого примера - ошибка округления; это происходит потому, что точное представление десятичного числа 1.6 требует двоичного числа с бесконечным числом. Поскольку числа с плавающей запятой имеют конечное число битов, число округляется до ближайшего, но не равного значения.
Для версий Python до 2.6 (по крайней мере, до 2.0)
Вы можете использовать синтаксис "modulo-formatting" (это работает и для Python 2.6 и 2.7):
>>> print '%.16f' % 1.6
1.6000000000000001
>>> print '%.15f' % 1.6
1.600000000000000
Ответ 2
Числа с плавающей запятой не имеют точности, чтобы точно представлять "1,6" для этого количества десятичных знаков. Ошибки округления являются реальными. Ваш номер на самом деле не 1,6.
Отъезд: http://docs.python.org/library/decimal.html
Ответ 3
Я предполагаю, что это по существу помещает его в строку, но это позволяет избежать ошибки округления:
import decimal
def display(x):
digits = 15
temp = str(decimal.Decimal(str(x) + '0' * digits))
return temp[:temp.find('.') + digits + 1]