Как заставить float вывести больше 15 знаков после запятой? Python
Пытаюсь вывести число ПИ из функции
...
return float(return_pi)
Но выдает только с 15-ю знаками после запятой. Можно ли вывести все знаки после запятой, оставив float?
Ответы (2 шт):
Начнём с печати как можно большего количества знаков:
$ python Python 3.10.0 (default, Oct 16 2021, 12:17:56) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. @>>> import math @>>> f'{math.pi:.100g}' '3.141592653589793115997963468544185161590576171875'
Обратите внимание - я попросил 100 знаков, а получил меньше. Питон отказывается печатать слишком много чепухи.
Дальше я напечатаю число типа float предшествующее math.pi и следующее за ним:
@>>> prev = math.nextafter(math.pi, -math.inf) @>>> next = math.nextafter(math.pi, math.inf) @>>> f'{prev:.100g}' '3.141592653589792671908753618481568992137908935546875' @>>> f'{next:.100g}' '3.141592653589793560087173318606801331043243408203125'
Рассмотрим их внимательнее:
10 20 12345678901234567890 v 3.141592653589792671908753618481568992137908935546875 3.141592653589793115997963468544185161590576171875 3.141592653589793560087173318606801331043243408203125
Они начинают различаться на пятнадцатом знаке после запятой. Это значит что точности float хватает чтобы выписать только пятнадцать знаков после запятой, все цифры сверх того не имеют смысла. Хотя их можно напечатать, их нет в памяти. Их придумывает алгоритм, который переводит двоичный float в десятичный вид. К реальному значению числа они отношения не имеют.
Всем спасибо за комментарии и Stanislav Volodarskiy за ответ. Изначально float я использовал потому что хотел получить тип "число", при этом получив все знаки в print. Но благодаря ответам понял, что это невозможно. Нашел такое решение:
import decimal
......
return decimal.Decimal(return_pi)
Работает