Python从浮点数中获取最低有效数字(不使用字符串操作)

时间:2011-04-12 11:51:02

标签: python floating-point int bit-manipulation

假设我有浮点数12345.6789并且我希望使用python(v.2.6)中的位操作将六个最低有效数字(即45.6789)作为int(即456789)。

我该怎么做?

由于

PS我不想使用字符串操作,即使它很容易:对于任何浮动f:

int(str(int(f * 1000))[-10:])

编辑:这个原始问题毫无意义,正如其中的评论所示。许多道歉......而不使用字符串获取最低有效数字的方法如下所示(使用整数和模数)

3 个答案:

答案 0 :(得分:7)

>>> a = 12345.6789
>>> b = int(a*10000)
>>> b
123456789
>>> c = b % 1000000
>>> c
456789

但是 - 为什么??

答案 1 :(得分:3)

>>> int(12345.6789*10000)%1000000
456789

但这不是位操作

答案 2 :(得分:3)

与你的字符串解决方案相关的是浮点显示算法在python 2.7中发生了变化:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
>>> 12345.6789
12345.678900000001

Python 2.7.0+ (r27:82500, Sep 15 2010, 18:04:55) 
>>> 12345.6789
12345.6789

无论您使用其中一个,还是有一个问题,确切地知道浮点数的精确度。假设你的算法给出了浮动1.23。精度是多少?也许它被存储为1.230,但它恰好以零数字结束。因此,您必须知道希望保留的时间段后有多少位数。

此外,位操作不适用于浮点数:

>>> 12345.6789 << 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for <<: 'float' and 'int'

所以你必须将浮动乘以你已知的精度并使用模数(%),如其他海报所示。