解析这些数据和舍入数字的建议

时间:2012-11-18 12:53:59

标签: python rounding

我在文本文件中有一些数据,我使用正则表达式来解析数据 从文件中存储数字和索引在两个变量中。我想将数字四舍五入到相同的小数位并将其写入一个新文件(使用它的索引A,B,C)

这组数据全部在小数点后3位

11,000.233

B 4.000

C 14,798.241

另一组数据在小数点后2位

11,000.23

B 4.00

C 14,798.24

当我使用readlines()

读取它们时,它们最初都是字符串格式

但是当我将第一组数据中的字符串转换为float时,然后使用str(round(float(number),2)将它从3位小数位舍入到2位小数位)

我遇到了两个问题

  1. 它会给我一个A(11,000.233)和C(14,798.241)的ValueError

    据我所知,这是由11,000.23中的引起的。但我不知道如何处理它。有人可以给我一些关于如何处理它的建议吗?

  2. 对于B,当我尝试使用相同的方法转换数字时,它给我4.0而不是4.00。无论如何可以输出4.00而不是4.0?

2 个答案:

答案 0 :(得分:1)

  1. 在使用replace()之前,请使用字符串,方法删除float()

    float("1,123.4567".replace(",", ""))
    
  2. 使用字符串format()方法更改浮点字符串表示形式。

    format(4.0, ".2f")
    

答案 1 :(得分:0)

将字符串拆分为","并使用"".join()

In [32]: strs="11,000.233"

In [33]: float("".join(strs.split(",")))
Out[33]: 11000.233

In [34]: strs="14,798.24"

In [35]: float("".join(strs.split(",")))
Out[35]: 14798.24

您可以使用字符串格式来获取4.00

In [36]: strs="4.00"

In [37]: float(strs)
Out[37]: 4.0

In [39]: format(float(strs),".2f")
Out[39]: '4.00'

In [40]: "{0:.2f}".format(float(strs))
Out[40]: '4.00'