给定一个表示十进制实数的字符串,如何计算所需的(非零)小数位数?

Dav*_*542 6 python

我将如何执行以下操作:

>>> num_decimal_places('3.2220')
3 # exclude zero-padding

>>> num_decimal_places('3.1')
1

>>> num_decimal_places('4')
0
Run Code Online (Sandbox Code Playgroud)

我正在考虑这样做:

len((str(number) if '.' in str(number) else str(number) + '.').rstrip('0').split('.')[-1])
Run Code Online (Sandbox Code Playgroud)

还有另一种更简单的方法吗?

Ste*_*ppo 4

您可以使用正则表达式来解析value、捕获十进制数字并计算匹配的长度(如果有):

import re

def num_decimal_places(value):
    m = re.match(r"^[0-9]*\.([1-9]([0-9]*[1-9])?)0*$", value)
    return len(m.group(1)) if m is not None else 0
Run Code Online (Sandbox Code Playgroud)

这比用 multiple 分割字符串要少一些“原始” if else,但不确定是否更简单或更易读。