【问题标题】:Turning Decimal type numbers into string type exactly将 Decimal 类型数字精确转换为字符串类型
【发布时间】:2018-08-16 01:41:32
【问题描述】:

如何将十进制模块中的小数精确地转换为字符串,以便在列表中循环?或者在尝试计算出精确到小数位数时是否有另一种方法会更好(忽略末尾的尾随零)。

import decimal
number = decimal.Decimal('0.00000001')

print(str(number))
>>'1E-8'

我想要:

print(str(number))
>> '0.00000001'

编辑:我不需要 .format 来打印它我需要遍历 for 循环中的每个数字。谢谢

【问题讨论】:

  • 你真正想要完成的是什么?

标签: python decimal floating-accuracy


【解决方案1】:

如果您只是想要数字中的小数位数(忽略尾随零),只需使用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

【讨论】:

    【解决方案2】:

    使用格式

    print('{0:f}'.format(number))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      相关资源
      最近更新 更多