在Python中对小数进行四舍五入

2 投票
2 回答
4542 浏览
提问于 2025-04-18 08:30

我有一个表格,里面有一些数字,比如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 则表示科学计数法。这里有很多选项可以选择;想了解更多细节,可以查看 格式字符串语法说明

撰写回答