在Python中进行最多两位小数的算术运算?
我在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