2014-01-20 44 views
0

如何检查两个金额相乘的结果是否等于某个总金额或几美分。例如:5.57 * 2.92 = 16.2644和3.25 * 5 = 16.25。 我每次增加第一笔金额为0.01的金额以尝试找到最接近总金额的金额,第二笔金额不变。检查两个金额的总和是否等于某个总差额

+2

似乎很简单 - 我们可以看到你的代码? – jedwards

+0

所以你想计算涉及的总股份? –

+0

@AamirAdnan我在计算潜在利润,如果马上的价格在你支持它之后下跌,基于蜱,所以说你回到5.0,马下降到4.8,我想显示你可以为它铺平了多少把你的债务转化为利润 –

回答

3

如果您使用Python(或任何编程语言)进行财务类型计算,您可以使用而不是希望使用浮点数(http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems)。

相反,一定要至少使用decimal模块,它会给你任意精度的十进制数(http://docs.python.org/2/library/decimal.html)。

至于你的实际问题:

from decimal import Decimal 

r1 = Decimal("5.57") * Decimal("2.92") 
r2 = Decimal("3.25") * Decimal("5") 
epsilon = Decimal("0.01") 

if abs(r1 - r2) <= epsilon: 
    print "Almost equal!" 
+0

它至少部分是这样做的:0.01不能用二进制表示,这意味着如果OP使用浮动,OP的计算会很早就开始累积错误。 –

+0

好点。编辑! –

+0

谢谢,那对我有帮助。 –

2

小数还是不错的。

,但对一个公差范围内两个浮体比较:

tolerance = 0.04 
if abs(number1 - number2) < tolerance: 
    print('the numbers are close') 
+0

谢谢,是否有任何优势使用浮动,而不是小数由马克斯诺埃尔建议? –

+0

这是写得最快,最容易的一点,但由于准确性问题,这里的一般建议是“十进制”。 – jayelm