在Python中进行最多两位小数的算术运算?

0 投票
6 回答
6895 浏览
提问于 2025-04-15 22:18

我在Python中有两个浮点数,我想要把它们相减,也就是:

v1 = float(value1)
v2 = float(value2)
diff = v1 - v2

我希望“diff”这个结果能保留到小数点后两位,也就是说要用%.2f来处理v1和%.2f来处理v2。请问我该怎么做?我知道怎么把v1和v2打印成小数点后两位,但不知道怎么进行这样的计算。

我特别想避免的问题是这样的。假设:

v1 = 0.982769777778
v2 = 0.985980444444
diff = v1 - v2

然后我把以下内容打印到文件中:

myfile.write("%.2f\t%.2f\t%.2f\n" %(v1, v2, diff))

那么我得到的输出是:0.98 0.99 0.00,这看起来好像v1和v2之间没有差别,尽管打印的结果显示它们之间有0.01的差距。我该怎么解决这个问题呢?

谢谢。

6 个回答

1

我以前用过一种简单的固定点方法。基本上就是用整数来处理所有的数字,把它们都乘以100,然后在打印之前再除以100。

最近在Slashdot上有一篇关于类似问题的好文章。

2

我觉得使用 round 是个不错的选择。

a = 2.000006
b = 7.45001
c = b - a
print(c) #This gives 5.450004
print(round(c, 2)) ##This gives 5.45
3

你在评论中提到不想使用 decimal,但其实在这种情况下,使用它是最合适的。要知道,这并不是一个“额外的库”,因为从Python 2.4版本开始,它就是默认提供的,你只需要用 import decimal 来引入它。想要显示数值时,可以使用 Decimal.quantize 方法把数字四舍五入到小数点后两位,然后再计算这些小数之间的差值。

>>> v1 = 0.982769777778
>>> v2 = 0.985980444444
>>> from decimal import Decimal
>>> d1 = Decimal(str(v1)).quantize(Decimal('0.01'))
>>> d2 = Decimal(str(v2)).quantize(Decimal('0.01'))
>>> diff = d2 - d1
>>> print d1, d2, diff
0.98 0.99 0.01

撰写回答