假设我有浮点数12345.6789并且我希望使用python(v.2.6)中的位操作将六个最低有效数字(即45.6789)作为int(即456789)。
我该怎么做?
由于
PS我不想使用字符串操作,即使它很容易:对于任何浮动f:
int(str(int(f * 1000))[-10:])
编辑:这个原始问题毫无意义,正如其中的评论所示。许多道歉......而不使用字符串获取最低有效数字的方法如下所示(使用整数和模数)
答案 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'
所以你必须将浮动乘以你已知的精度并使用模数(%),如其他海报所示。