4

Given a Decimal number in python how can I find the number of digits past the decimal point?

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
4

2 回答 2

4

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

def digits(n):
    return max(0,-n.as_tuple().exponent)
于 2013-05-28T16:09:17.757 回答
2

假设您从字符串开始,我将概述一个可能的算法。

  • 从左边开始,找到小数点。计算它与'E'字符串的 an 或 end 之间的数字。如果没有小数点,则计数为零。
  • 解析出下面的值'E'并转换为整数。如果没有'E',那就是零。
  • 从上述两个值中的第一个减去第二个;最大值和零是结果。所以'2E-2'会有两位小数,'1.2E+5'没有,而相当愚蠢的'0.02E2'人也没有。
  • 作为一个退化的情况,零本身可能有零小数位。至于无穷大和任何其他特殊值,我对小数点是否为零没有强烈的看法。
于 2013-05-28T14:44:48.260 回答