Подтвердить что ты не робот

Печатать float до n знаков после запятой, включая конец 0

Мне нужно напечатать или преобразовать число с плавающей запятой в 15-значную десятичную строку, даже если результат имеет много конечных 0, например:

1.6 становится 1.6000000000000000

Я попытался округлить (6.2,15), но он возвращает 6.2000000000000002, добавив ошибку округления

Я также видел в сети разных людей, которые помещали float в строку, а затем добавляли трейлинг 0 вручную, но это кажется плохим...

Каков наилучший способ сделать это?

4b9b3361

Ответ 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]