在Python中对小数进行四舍五入
我有一个表格,里面有一些数字,比如5E-7和10E-4,但这些数字有很多小数位,比如5.646273838E-7。我知道在Python中可以用round函数来设置小数位的精度,但因为我的数字各不相同,我想把每个数字都四舍五入到2位小数,同时保留科学计数法的形式。所以我希望5.646273838E-7变成5.64E-7,2.38212538E-4变成2.38E-4。我试着用一种方法,把数字转换成字符串,然后计算字符串的长度,比如对于5.646273838E-7,如果字符串长度大约是17,我就把四舍五入的位数设置为(17-2)*0.5,这样对我的数据范围有点效果。但是有没有人能推荐一个更好的方法呢?
@user545424: 嗨,这个方法很有用,效果也不错,只是我的数据是从一个文本文件中读取的,里面有字符串和数字。字符串是对象的名称,比如:
名称 属性1 属性2
对象1 5.343e-10 2.574e-10
然后我用以下代码来读取并显示成表格,并保存为latex文件 numpy.set_printoptions(precision=2)
out=numpy.loadtxt('data.txt', dtype=str,usecols=(0,1,2,3))
col=zip(*out)
tab=Table(col)
tab.write('table',format='latex')
print(tab)
谢谢
2 个回答
2
如果你在使用numpy数组,可以用 np.round()
这个函数来进行四舍五入。比如说:
>>> import numpy as np
>>> a = np.random.rand(4,3)
>>> a
array([[ 0.77600629, 0.76947092, 0.8145481 ],
[ 0.08514862, 0.67965067, 0.90147548],
[ 0.88886939, 0.57478246, 0.38501869],
[ 0.57264822, 0.3376192 , 0.55660758]])
>>> np.round(a,2)
array([[ 0.78, 0.77, 0.81],
[ 0.09, 0.68, 0.9 ],
[ 0.89, 0.57, 0.39],
[ 0.57, 0.34, 0.56]])
补充:
如果你想保持一定的有效数字,而不仅仅是四舍五入,可以使用 np.set_printoptions()
来实现:
>>> np.set_printoptions(precision=2)
>>> b = a*1e-10
>>> b
array([[ 7.76e-18, 7.69e-18, 8.15e-18],
[ 8.51e-19, 6.80e-18, 9.01e-18],
[ 8.89e-18, 5.75e-18, 3.85e-18],
[ 5.73e-18, 3.38e-18, 5.57e-18]])
7
>>> format(0.1234, '.2e')
'1.23e-01'
这里你需要用到的是 format
函数和它相关的 str.format
方法。.2
的意思是“保留小数点后2位数字”,而 e
则表示科学计数法。这里有很多选项可以选择;想了解更多细节,可以查看 格式字符串语法说明。