如果我有一个Python
Decimal
,我怎样才能可靠地获得数字的精确十进制字符串(即不是科学记数法)表示而不带尾随零?
例如,如果我有:
>>> d = Decimal('1e-14')
我会像:
>>> get_decimal_string(d)
'0.00000000000001'
但是:
-
Decimal
类没有任何to_decimal_string
方法,甚至没有任何to_radix_string(radix)
(cf: https://docs.python.org/3/library /decimal.html#decimal.Context.to_eng_string ) -
%f
格式化程序默认四舍五入到小数点后 6 位 -'%f' %(d, ) ==> '0.000000'
- 或需要精确的小数位数。 -
|| |格式化程序
{:f}.format(...)
似乎 可以工作- -'{:f}'.format(d) ==> '0.00000000000001'
但是 我不愿意相信这一点,因为这实际上与 文档 背道而驰,其中说“| ||… 将数字显示为定点数。默认精度为 6" 并且'f'
有时返回科学计数法: -
Decimal.__repr__
那么,有没有办法从 Python|| 获取十进制字符串。 |?或者我需要使用Decimal.__str__
自己推出?repr(d) ==> "Decimal('1E-14')"
So, is there any way to get a decimal string from a Python
Decimal
? Or do I need to roll my own using
Decimal.as_tuple()
?
可以使用
str(d)
将
Decimal
对象
d
安全地转换为其精确的十进制字符串表示形式,而无需任何尾随零。
from decimal import Decimal
d = Decimal('1e-14')
# 将 Decimal 转换为字符串
decimal_str = str(d)
print(decimal_str) # 输出:'0.00000000000001'
虽然提到的格式化方法(例如
format(d, 'f')
)在某些情况下可能有效,但它们依赖于这些格式化函数的内部精度处理,并且对于所有可能的值可能不提供
Decimal
对象的精确表示。
另一方面,
str(d)
保证返回
Decimal
实例存储的确切值的规范表示形式。这就是为什么它是获取
Decimal
的字符串表示形式时推荐的方法,尤其是在需要高精度的情况下。