将 Decimal 类型的数字准确地转换为字符串类型
Turning Decimal type numbers into string type exactly
如何将 decimal 模块中的 decimal 准确地转换为字符串,以便我可以在列表中循环?或者是否有另一种方法在尝试计算出精确到的小数位数时效果更好(忽略末尾的尾随零)。
import decimal
number = decimal.Decimal('0.00000001')
print(str(number))
>>'1E-8'
相反,我想要:
print(str(number))
>> '0.00000001'
编辑:我不需要 .format 来打印它我需要在 for 循环中遍历每个数字。谢谢
使用格式
print('{0:f}'.format(number))
如果您只是想要数字中的小数位数(忽略尾随零)只需使用 decimal.Decimal.as_tuple
,因此:
In [48]: number = decimal.Decimal('0.00000001')
...:
In [49]: number.as_tuple()
Out[49]: DecimalTuple(sign=0, digits=(1,), exponent=-8)
In [50]: abs(number.as_tuple().exponent)
Out[50]: 8
请注意,为了安全起见,您可能需要 .normalize
:
In [57]: number = decimal.Decimal('3.0000')
In [58]: number.as_tuple()
Out[58]: DecimalTuple(sign=0, digits=(3, 0, 0, 0, 0), exponent=-4)
In [59]: number.normalize().as_tuple().exponent
Out[59]: 0
所以...
In [65]: new_number = number.log10()
In [66]: new_number
Out[66]: Decimal('0.4771212547196624372950279033')
In [67]: abs(new_number.normalize().as_tuple().exponent)
Out[67]: 28
In [68]: len('4771212547196624372950279033')
Out[68]: 28
如何将 decimal 模块中的 decimal 准确地转换为字符串,以便我可以在列表中循环?或者是否有另一种方法在尝试计算出精确到的小数位数时效果更好(忽略末尾的尾随零)。
import decimal
number = decimal.Decimal('0.00000001')
print(str(number))
>>'1E-8'
相反,我想要:
print(str(number))
>> '0.00000001'
编辑:我不需要 .format 来打印它我需要在 for 循环中遍历每个数字。谢谢
使用格式
print('{0:f}'.format(number))
如果您只是想要数字中的小数位数(忽略尾随零)只需使用 decimal.Decimal.as_tuple
,因此:
In [48]: number = decimal.Decimal('0.00000001')
...:
In [49]: number.as_tuple()
Out[49]: DecimalTuple(sign=0, digits=(1,), exponent=-8)
In [50]: abs(number.as_tuple().exponent)
Out[50]: 8
请注意,为了安全起见,您可能需要 .normalize
:
In [57]: number = decimal.Decimal('3.0000')
In [58]: number.as_tuple()
Out[58]: DecimalTuple(sign=0, digits=(3, 0, 0, 0, 0), exponent=-4)
In [59]: number.normalize().as_tuple().exponent
Out[59]: 0
所以...
In [65]: new_number = number.log10()
In [66]: new_number
Out[66]: Decimal('0.4771212547196624372950279033')
In [67]: abs(new_number.normalize().as_tuple().exponent)
Out[67]: 28
In [68]: len('4771212547196624372950279033')
Out[68]: 28