在python中舍入小数字

时间:2014-06-04 00:04:22

标签: python formatting

我有一个包含数字的表格,如5E-7,10E-4,但数字是精确到几个小数点,如5.646273838E-7。我知道我可以在python中使用round函数来设置精度,但由于我的所有数字都有所不同,我希望能够将每个数据舍入为2 d.p但仍然保持答案中的指数。所以我希望5.646273838E-7成为5.64E-7和2.38212538E-4成为2.38E-4。我试图使用一种方法,我可以将我的数字转换为字符串然后计算字符串长度,所以对于5.646273838E-7,如果字符串长度是~17,我将舍入设置为(17-2)* 0.5并且它有点像我的数据范围。但是,有人可以提出更好的方法吗?

@ user545424:嘿,这是一个非常有用的事情,要知道并完成这项工作,除了我的数据是从一个包含字符串和数字的文本文件中读取的。字符串是对象的名称,例如: 名称Prop_1 Prop_2
object_1 5.343e-10 2.574e-10

然后我使用以下代码读取并将其显示为表格并另存为乳胶文件 numpy.set_printoptions(精密= 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 个答案:

答案 0 :(得分:5)

>>> format(0.1234, '.2e')
'1.23e-01'

您需要format函数和密切相关的str.format方法。 .2表示"小数点后的2位数",e表示科学记数法。有很多选择;有关详细信息,请参阅format string syntax specification

答案 1 :(得分: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]])