假设有这个号码:
p=0.00001
现在,如果我们打印这个变量,我们得到1e-05
(即用科学记数法表示的那个数字)。如何准确打印0.00001
(即十进制表示法)?好的,我知道我可以使用format(p, '.5f')
,但事实是我事先并不知道小数位数(例如,我可能有0.01
或0.0000001
,等等。)。因此,我可以计算小数位数并在format
函数中使用它。这样做,我有一个相关的问题...有没有办法计算十进制数的十进制数而不使用Decimal
?
答案 0 :(得分:2)
...有没有办法在不使用
Decimal
的情况下计算浮点数的十进制数?
不。并且使用Decimal
也无法做到这一点。不是1/2的幂的精确和的浮点数不具有确切的小数位数。你能做的最好的事情就是根据最左边的非零数字和一些任意数字来执行某种猜测。
答案 1 :(得分:1)
通常,您不能计算小数位数,但您可以计算最小精度,并将其与str.format中的f
格式规范或等效函数一起使用:
from math import ceil, log10
p = 0.00001
precision = int(ceil(abs(log10(abs(p))))) if p != 0 else 1
'{:.{}f}'.format(p, precision)
如果要显示多个有效数字,则需要提高精度。此外,您可能需要略微不同的数字逻辑> 1。
答案 2 :(得分:-1)
p = 0.0000000000000000000001
s = str(p)
print(format(p, "." + s.split("e")[-1][1:]+"f")) if "e" in s else print(p)