首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取小数位数

如何获取小数位数
EN

Stack Overflow用户
提问于 2015-02-26 17:42:18
回答 8查看 2.4K关注 0票数 6

我将如何做以下工作:

代码语言:javascript
复制
>>> num_decimal_places('3.2220')
3 # exclude zero-padding

>>> num_decimal_places('3.1')
1

>>> num_decimal_places('4')
0

我在考虑做:

代码语言:javascript
复制
len((str(number) if '.' in str(number) else str(number) + '.').rstrip('0').split('.')[-1])

还有另外一种,更简单的方法来完成这个任务吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-02-26 17:52:14

您可以使用regex解析value、捕获十进制数字并计数匹配的长度(如果有的话):

代码语言:javascript
复制
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拆分字符串要少一些“原始”,但不确定是更简单还是更易读。

票数 4
EN

Stack Overflow用户

发布于 2015-02-26 18:31:07

实现这一目标的最佳和最毕达通的方法是:

代码语言:javascript
复制
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

以上代码可以以更简单的方式编写,如下所示:

代码语言:javascript
复制
>>> x = '56.001000'
>>> abs(decimal.Decimal(x.rstrip('0')).as_tuple().exponent)
3

下面是用于更多参考的已使用函数的列表:

  1. str.rstrip():返回字符串的副本,并删除尾随字符。
  2. decimal.Decimal():根据值构造一个新的Decimal对象。
  3. x.as_tuple():返回格式的名称:DecimalTuple(sign=0,digits=(1,),指数=-3)
  4. abs():返回数字的绝对值。
票数 3
EN

Stack Overflow用户

发布于 2015-02-26 17:58:18

您不需要regex,您可以转换为float和转换回字符串!这将自动移除零:

代码语言:javascript
复制
>>> 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')
0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28749177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档