如果我有一个Python的Decimal
对象,如何可靠地获取该数字的精确小数点字符串表示(即非科学计数法),并且不带有尾随零?
例如,如果我有:
>>> d = Decimal('1e-14')
我愿意:
>>> get_decimal_string(d)
'0.00000000000001'
然而:
Decimal
类没有任何to_decimal_string
方法,或者任何to_radix_string(radix)
(参考: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'
- 然而我不太愿意相信它,因为这实际上与文档相反,文档说:“'f'
……将数字显示为定点数,默认精度为6”Decimal.__repr__
和Decimal.__str__
有时会返回科学计数法:repr(d) ==> "Decimal('1E-14')"
那么,有没有办法从Python的Decimal
中获取十进制字符串?还是我需要使用Decimal.as_tuple()
自己编写?
format
将要生成的内容。 - Mark Ransomstring.format
文档关于'f'
行为的描述相矛盾,因此我不太敢相信它。 - David WoleverDecimal.__format__
方法的实现。 - Julianstring.format
不再控制格式操作符所执行的操作 — 现在这个任务被延迟到了__format__()
方法中。 - Brandon Rhodes