如何打印一个十进制数而不使用指数形式/科学计数法?

3
为了打印一个不带指数形式的浮点数,我们可以这样写:

要打印一个不带指数形式的浮点数,我们可以像这样编写:

print('%f' % (10**-8))

但是由于精度误差,通常会显示零。相反,我们可以使用Decimal.decimal(float)来精确打印浮点数。但是它会以指数形式打印数字,即10e-10。我似乎无法将它们组合起来,因为我不知道如何像使用'%f'格式化浮点数一样格式化Decimal
那么我的问题是,如何按照我想要的方式完成这件事?
注意:这里使用的功率-8只是一个例子。功率可以是变量。此外,我想知道是否可以以高精度打印两个数字之间的差异。
1个回答

3
from decimal import Decimal
print('%.8f' % Decimal(10**-8))

输出:

0.00000001

为了动态指定小数位数,您可以使用以下内容:

要动态指定小数位数,您可以使用以下内容:

from decimal import Decimal

power = 10
print('%.*f' % (power, Decimal(10**-power)))

输出:

0.0000000001

你只展示了10的-8次方的解决方案。如果数字的指数是可变的怎么办?如果它发生变化怎么办? - Meraj al Maksud
以下代码生成错误: `>>> from decimal import Decimal
a = 10**-8 print("%.*f" % Decimal(a)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: * wants int`
- Meraj al Maksud
@MerajAlMaksudMasuk,您需要在格式中指定两个数字 - 小数位数和数字。 - Andrej Kesely
3
使用 .format 格式化字符串比使用基于 % 的格式化更好。对于基于 % 的格式化,一个 Decimal 实例会首先被转换为最接近的 float,可能引入舍入误差。对于 .format 格式化,格式化直接应用于实际的 Decimal 值而不需要进行浮点数转换。(假设Python版本 >= 3.1) - Mark Dickinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接