在python中浮动和舍入

时间:2014-03-11 10:32:29

标签: python floating-point

我正在处理一个长文件,其列如下:

0.028488    35.3465833928   0.223905932998  0.128418942246  23  51  50.23   -27 57  47.4

我必须复制前3列,处理最后3列并将结果写入文件。这是代码的一部分:

with open(file) as fin:
    for line in fin:
        a = float(line.split()[1])
        b = float(line.split()[2])
        c = float(line.split()[3])
        deg = float(line.split()[7])
        min = float(line.split()[8])
        sec = float(line.split()[9])
        #I have to calculate radiants from deg, min, sec (and I have some phase issues: that is why I write pi/2 - ...)
        if (deg != 0.):
            rad = math.pi/2. - deg/math.fabs(deg) *(deg + min/60. + sec/3600.) * math.pi/180.
        else:
            if (min !=0):
                rad = math.pi/2. - min/math.fabs(min) * (min/60. + sec/3600.) * math.pi /180.
            else:
                rad = math.pi/2. - sec/math.fabs(sec) * (sec/3600.) *math.pi/180.
        vec = [[a, b, c, rad]]
        np.savetxt(fout,vec)

这就是python在文件上写的内容:

2.848799999999999900e-02 3.534658339280000000e+01 2.239059329979999900e-01 7.016950813538869200e-01

正如你所看到的,因为a,b,c是浮点数,python在重写它们时遇到了一些困难,我认为这会导致我的代码出现一些问题(也许可能会出现问题)。

如果可以,我该如何避免呢?

编辑:纠正了一个(可怕的)错字......

我使用python 2.6

1 个答案:

答案 0 :(得分:0)

您可以使用numpy.savetxt参数将格式字符串传递给fmt,以指定格式化输出的方式。

np.savetxt(fout, vec, fmt="%.2f")

这应该会产生这样的结果:

35.35 0.22 0.13 1.12

这不会进行舍入,但会截断打印出的小数位数。您可以通过更改格式字符串来更改要显示的小数位数。