在 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)
例如,如果我有:
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)