可以python十进制保留十进制格式

时间:2018-03-23 19:32:01

标签: python floating-point decimal precision decimalformat

Python十进制模块将精确编码的字符串十进制值转换为e表示法,这在模块文档中非常出乎意料。

>>> d = decimal.Decimal('0.00000039')
>>> d
Decimal('3.9E-7')

在尝试量化值后,输出保持不变:

>>> print d.quantize(decimal.Decimal('0.00000001'))
3.9E-7

如何防止这种情况发生,只需保留源格式,而无需进行格式转换。另外,请随时推荐其他稳定可靠的模块来处理精确的小数。

1 个答案:

答案 0 :(得分:2)

您可以使用'%f'{:f}字符串格式说明完全控制值的显示方式。例如:

>>> d = decimal.Decimal('.0000000037')
>>> print('{:f}'.format(d))
0.0000000037
>>> print('{:e}'.format(d))
3.7e-9
>>> print('{:g}'.format(d))
3.7e-9
>>> 

以下是显示该值的其他方法:

In [4]: d = decimal.Decimal('.0000000037')

In [5]: d
Out[5]: Decimal('3.7E-9')

In [6]: str(d)
Out[6]: '3.7E-9'

In [7]: repr(d)
Out[7]: "Decimal('3.7E-9')"

In [8]: '{:f}'.format(d)
Out[8]: '0.0000000037'

如果您要自定义Decimal的默认表示,则可以从decimal.Decimal派生一个类并覆盖.__str__().__repr__

import decimal

class Decimal(decimal.Decimal):
    def __str__(self):
        return "'" + decimal.Decimal.__format__(self, 'f') + "'"
    def __repr__(self):
        return self.__str__()

用法:

>>> import x
>>> d = x.Decimal('0.0000000039')
>>> d
'0.0000000039'
>>> [d]
['0.0000000039']

请注意,这将始终使用您指定的格式样式,即使原始文本的格式不同。

>>> e = x.Decimal('6.022140857e23')
>>> e
'602214085700000000000000'
>>> [e]
['602214085700000000000000']
>>> 
相关问题