将数字四舍五入到最接近的基数为10的数字

时间:2017-08-22 02:20:49

标签: python python-2.7 numpy

我想获得输入new_n的最近的基数为10的数字(例如10,100,1000)n。例如,99获得100(不是10),551获得1000(不是100)。

我尝试使用np.log10来提取输入数字n的强大功能并使用它来为10提供动力

import numpy as np

n = 0.09
new_n = 10**(int(round(np.log10(n))))
print new_n

n = 35
new_n = 10**(int(round(np.log10(n))))
print new_n

n = 999
new_n = 10**(int(round(np.log10(n))))
print new_n

n = 4655
new_n = 10**(int(round(np.log10(n))))
print new_n

> 0.1
> 100
> 1000
> 10000

问题是35 np.log10(n)(我希望用作权力)的数字是1.544068,其四舍五入为2。结果是100而不是10。或4655的结果为10000。如何将数字四舍五入到最近的基数10?

3 个答案:

答案 0 :(得分:2)

在获得指数后,在线性空间中添加一个回检(可能的修正):

n = np.array([0.09,35,549,551,999,4655])
e = np.log10(n).round()
#array([-1.,  2.,  3.,  3.,  3.,  4.])

那么,这个数字是接近“舍入”答案还是之前的10度?

new_n = np.where(10**e - n <= n - 10**(e - 1), 10**e, 10**(e - 1))
#array([  1.00000000e-01,   1.00000000e+01,   1.00000000e+02,
#         1.00000000e+03,   1.00000000e+03,   1.00000000e+03])

答案 1 :(得分:1)

您可以在拍摄日志之前通过缩放数字来实现您想要的效果。将每个值乘以sqrt(10) / 5.5,您应得到所需的结果:

n = np.array([0.09,35,549,551,999,4655]) # borrowed test values from @DYZ
multiplier = np.sqrt(10) / 5.5
results = 10**np.log10(multiplier * n).round()
# array([  1.00000000e-01,   1.00000000e+01,   1.00000000e+02,
#          1.00000000e+03,   1.00000000e+03,   1.00000000e+03])

答案 2 :(得分:0)

你可以尝试这个:

import np
new_n = 10**(np.floor(np.log10(n)-np.log10(0.5)))