python中的除法错误,结果错误地舍入

时间:2014-04-16 13:11:10

标签: python

我正在尝试制作BMI计算器功能。我在pyschools学习python。 这是我的代码:

# Note: Return a string of 1 decimal place.
def BMI(weight, height): 
    x = weight /(height*height)
    g = round(x,1)
    return g

pyschools告诉我这些是正确的答案: 110 =体重,2 =身高,我应该得到27.5的BMI。 但我反而得到了27。

然后它会进行第二次检查,以确保我编写正确的代码并告诉我24,2是正确的答案,但我的程序确实返回24,2。但它仍然用红色标出我的答案并且说"我的" 24,2是错误的,网站是对的。

如果有人有更好的网站或任何学习python的东西,也会受到赞赏,因为这个网站有时候似乎有点不对劲。我正在寻找免费的在线资源。请不要书。

3 个答案:

答案 0 :(得分:1)

要解决所有情况,请将此行添加到顶部:

from __future__ import division  # Make division work like in Python 3.

在Python 2中,/表示整数除法。


考虑到这一点,在Python 2中如果将intgers传递给division,它将返回一个整数。任何可能是浮动的东西都是 * 。因此,获得所需结果的另一个选择是传递float,而不是:

weight / (height*height)

做的:

float(weight) / (height*height)  # float in means float out.

* 这意味着只计算除数进入的全部时间。因此1/2将获得0,因为2 完全进入1 0次。

答案 1 :(得分:0)

def BMI(weight, height): 
    x = float(weight) /(height*height)
    g = round(x,1)
    return g

请参阅Python division

Binary arithmetic operations

答案 2 :(得分:0)

问题在于你的分工。

分区,因为我们本质上知道它是浮点除法,或1 / 2求值为分数0.5的除法。在标准的程序划分中,12ints()因此无法成为分数,或floats(),因为在python中调用了类型。因此,表达式1 / 2的计算结果为0,因为2整数整数不能完全变为一个整数。

例如:

In [1]: 1 / 2
Out[1]: 0

# Explicitly what is going on, since 1 and 2 are ints. 
In [2]: int(1) / int(2)
Out[2]: 0

#fixed with floating division
In [3]: float(1) / float(2)
Out[3]: 0.5

# protip: only one of the divisors needs to be a float for python to divide correctly.
In [4]: 1 / float(2)
Out[4]: 0.5

使用x = weight / float((height*height))获得您期望的结果。

# Note: Return a string of 1 decimal place.
def BMI(weight, height): 
    x = weight / float((height*height))
    g = round(x,1)
    return g