Python中的重复除法会产生不正确的结果

时间:2017-11-04 14:37:49

标签: python math

我正在计算几个人之间的金额划分。在计算出第一个人的支付后,其他两个人的支付不正确。

对斯坦来说是1/2。 2/3剩下的是Kyle。 其余部分将与Butters和Wendy平分。

我对斯坦的第一次分裂是正确的,但在那之后似乎无法找出正确的编码方式。

def main():
    estate = int(input('Enter value of Kennys estate '))
    stan = estate / 2
    kyle = stan * .66
    wendy_butters = kyle / 2


    print('stan gets$ ',format (stan,' .2f'))
    print('kyle gets$ ',format (kyle,' .2f'))
    print('Butters and Wendy each get $ ',format (wendy_butters,' .2f'))

main ()

3 个答案:

答案 0 :(得分:0)

def main():
    estate = int(input('Enter value of Kennys estate '))
    stan = estate / (2.0)
    kyle = (estate - stan) * (2.0/3)
    wendy_butters = (estate - (stan + kyle))/2.0


    print('stan gets$ ',format (stan,' .2f'))
    print('kyle gets$ ',format (kyle,' .2f'))
    print('Butters and Wendy each get $ ',format (wendy_butters,' .2f'))

main ()

我对计算进行了更改,检查它是否适合您。

<强>输出:

Enter value of Kennys estate 450
stan gets$   225.00
kyle gets$   150.00
Butters and Wendy each get $   37.50

答案 1 :(得分:0)

你所拥有的大部分内容都是正确的,但有一条注意事项是stan * .66来计算凯尔的部分并不准确,而且随着estate变大,它会变得更加不精确。你应该使用Python 3或from __future__ import division,然后你可以做

kyle = stan * 2 / 3

为计算最后一笔金额,在Stan和Kyle获得股票后,余额为estate - stan - kyle - &gt; stan * 2 - stan - kyle - &gt; stan - kyle。简单的数学。

wendy_butters = (stan - kyle) / 2

答案 2 :(得分:0)

您的问题是因为默认整数除法,您需要将其转换为浮点除法

31/2 = 15应该是15.5 所以对于Kyle来说,它计算为15*.66,而不是16*.66(剩下的一个)

解决方案: 对于浮点除法,您可以将其写为 31/2.0 = 15.531/(float(2)) = 15.5