我将如何做以下工作:
>>> num_decimal_places('3.2220')
3 # exclude zero-padding
>>> num_decimal_places('3.1')
1
>>> num_decimal_places('4')
0我在考虑做:
len((str(number) if '.' in str(number) else str(number) + '.').rstrip('0').split('.')[-1])还有另外一种,更简单的方法来完成这个任务吗?
发布于 2015-02-26 17:52:14
您可以使用regex解析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这比用多个if else拆分字符串要少一些“原始”,但不确定是更简单还是更易读。
发布于 2015-02-26 18:31:07
实现这一目标的最佳和最毕达通的方法是:
import decimal
x = '56.001000'
x = x.rstrip('0') # returns '56.001'
x = decimal.Decimal(x) # returns Decimal('0.001')
x = x.as_tuple().exponent # returns -3
x = abs(x) #returns 3以上代码可以以更简单的方式编写,如下所示:
>>> x = '56.001000'
>>> abs(decimal.Decimal(x.rstrip('0')).as_tuple().exponent)
3下面是用于更多参考的已使用函数的列表:
发布于 2015-02-26 17:58:18
您不需要regex,您可以转换为float和转换回字符串!这将自动移除零:
>>> def convertor(s):
... try :
... int(s.rstrip('0').rstrip('.'))
... return 0
... except:
... return len(str(float(s)).split('.')[-1])
...
>>> convertor('4.0230')
3
>>> convertor('4.0')
0
>>> convertor('4')
0https://stackoverflow.com/questions/28749177
复制相似问题