在python中查找十进制数的小数部分中的位数

时间:2013-05-28 14:33:41

标签: python numbers decimal

在python中给出Decimal个数字,如何找到小数点后的位数?

assert digits(Decimal('1.2345')) == 4
assert digits(Decimal('1000'))   == 0
assert digits(Decimal('1.00'))   == 2
assert digits(Decimal('1E+5'))   == 0
assert digits(Decimal('1.2E+5')) == 0

2 个答案:

答案 0 :(得分:4)

经过一些实验,这似乎工作正常:

def digits(n):
    return max(0,-n.as_tuple().exponent)

答案 1 :(得分:2)

我将概述一种可能的算法,假设你以字符串开头。

  • 从左侧开始,找到小数点。计算它与'E'或字符串末尾之间的数字。如果没有小数点,则计数为零。
  • 解析'E'后面的值并转换为整数。如果没有'E',则为零。
  • 从上述两个值中的第一个中减去第二个值;最大值为零,结果为零。因此'2E-2'会有两个小数位,'1.2E+5'没有,而相当愚蠢的'0.02E2'则没有。
  • 作为退化情况,零本身可能具有零小数位。至于无穷大和任何其他特殊值,我不强烈认为这是否为零小数位。