在 Python 中,如何获取表示为 int 的浮点数的前 N ​​位十进制数字?

In Python, how can I get first first N decimal digits of a float represented as an int?

例如,如果我有:

12.43564

我希望能够 43564 作为 int。或者,如果浮点数有很多小数位,只取前N位小数作为整数就可以了。

例如,如果 N 是 3,对于 12.43564,我将得到 435

有办法吗?

更新:我无法转换为字符串。原因是我在 Numba 编译函数中需要它,并且由于这个未解决的问题,在该上下文中无法将浮点数转换为字符串:https://github.com/numba/numba/issues/4758

将其转换为字符串,将其拆分为小数点,然后对其进行切片:

x = 12.43564
print(str(x).split(".")[1][:3])

请注意,如果您尝试获取额外的数字,切片不会引发任何错误:

str(x).split(".")[1][:1000]

只会return43564

强制转换为字符串,按句点拆分,得到你想要的 N 个数字。

>>> x = 1.23456789
str(x)
>>> str(x)
'1.23456789'
>>> str(x).split('.')
['1', '23456789']
>>> str(x).split('.')[1][:4]
'2345'

根据编辑,

减去int部分。乘以 10000 得到前 4.

>>> (x - int(x)) * 10000
2345.678899999999
>>> int((x - int(x)) * 10000)
2345

不转成字符串,可以试试numpy.modf:

> np.modf(d)
(0.43563999999999936, 12.0)

> int(np.modf(d)[0] * 1e3)
435

这里有一种方法也适用于负数

def digits(x,N):
    return int((abs(x) % 1) * 10**N)
    
print(digits(1.23456,2))
print(digits(-1.23456,3))
print(digits(1.23,5))

给出:

23
234
23000

这是一个很好的纯数学方法,不需要任何扩展库:

n = 12.43564
result = n % int(n)
while not int(result) or int(result) % 10:
    result *= 10
result = int(result / 10)