查找小数位的简单方法


问题内容

是否有简单的方法或集成函数来找出浮点数的小数位?

该数字是从字符串中解析出来的,因此一种方法是对“。”之后的数字进行计数。标志,但是对我来说看起来很笨拙。是否有可能从对象floatDecimal对象中获取所需的信息?

解决方案 (当然是其中之一:))

我选择使用python decimal.Decimal类来帮助解决我的问题:

e = abs(Decimal(string_value).as_tuple().exponent)

注意:仅当从其构造Decimal的参数是字符串而不是浮点数时(这会导致浮点错误),此方法才有效。

非常感谢您所做的所有其他贡献。


问题答案:

重复别人说的话(因为我已经输入了!),由于十进制和二进制表示形式之间的差异,我什至不确定在浮点数的情况下该值是否有意义。通常,用有限数量的十进制数字表示的数字将只有二进制形式的无限数字表示。

在的情况下,decimal.Decimal对象,你可以使用检索指数as_tuple方法,它返回一个namedtuple
signdigitsexponent属性:

>>> d = decimal.Decimal('56.4325')
>>> d.as_tuple().exponent
-4
>>> d = decimal.Decimal('56.43256436')
>>> d.as_tuple().exponent
-8

指数的取反是小数点后的位数,除非指数大于0