0

Мне необходимо в выражении, например:

print (2/100000)

получить на выходе 0.00002, а не 2e-05?!

С функциями float или round(x,8) тоже самое выходит. Уточню, необходимо округление до 8 знаков после запятой.

3 Answers3

1
from decimal import *
getcontext().prec = 10
Decimal(2)/Decimal(100000)
a6461
  • 755
1

Чтобы вывести число с плавающей точкой в фиксированном формате с указанным числом знаков после запятой:

>>> '%.8f' % 2e-5
'0.00002000'

Если как переменные заданы:

>>> n = 2e-5
>>> precision = 8
>>> f'{n:.{precision}f}'
'0.00002000'
jfs
  • 52,361
0

Так пойдет?

 '%0.5f' % (2/100000)

Предлагаю ещё вот такую функцию

def fixed_num(n, prec=0):
    return f"{n:.{prec}f}"

fixed_num(2/100000, 5)
'0.00002'

PEP 498: Formatted string literals


Воспользовавшись идеей из соседнего ответа, можно определить функцию отображающую максимально возможное количество знаков без "научной нотации":

import decimal
ctx = decimal.Context()

# prec - precision - количество значащих знаков, не округление до знака
def float_to_str(f, prec = 18): # 18 знаков хватит всем (c) BG
    ctx.prec = prec
    d1 = ctx.create_decimal(repr(f))
    return format(d1, 'f')

>>> float_to_str(2/100000)
'0.00002'
>>> float_to_str(7/130000)
'0.00005384615384615385'
>>> float_to_str(7/130000)
'0.000053846154'
# округлять до знака нужно заранее
>>> float_to_str(round(7/23, 8))
'0.30434783'
vp_arth
  • 27,179
  • А если с максимальной точностью с отбрасыыанием незначащих нулей? – andreymal May 14 '18 at 09:20
  • Хм, а 1/30000 как выводить? – vp_arth May 14 '18 at 09:21
  • Как точность типа float позволяет, так и выводить) – andreymal May 14 '18 at 09:23
  • т.е. оригинальное выражение должно выглядеть как 0.00002000000000000000163606107828062619091724627651274204254150390625? Кому это нужно? =) – vp_arth May 14 '18 at 09:24
  • Ага, автор уточнил про 8 знаков после запятой. Тогда отстану от вас) – andreymal May 14 '18 at 09:37
  • @andreymal, последнее решение вроде удовлетворяет вашим запросам? – vp_arth May 14 '18 at 09:42
  • Decimal по-моему костыль, но по результату да :) – andreymal May 14 '18 at 09:59