在不同的python版本上对round(12.5)的不同结果

时间:2018-07-22 09:53:03

标签: python

当我在IDLE中测试round(x)函数时,它工作得非常好,因为当我输入round(12.5)时它给出的数字为13。但是,在我的程序中(请参见下文),它不会这样做,因为它将12.5舍入为12。

我的程序有什么问题?谢谢您的帮助。

我的程序:

import random

interval_begin = 1
interval_end = 50
interval_half = interval_end *0.5
interval_half_to_end = interval_end - interval_half
players_pick = float(input("Pick a number between {} and {}.". format(interval_begin, interval_end) ))
computer_guess = (interval_end)/2
print("Computer guesses {}.".format(computer_guess))
while players_pick != computer_guess:
    if computer_guess < players_pick:
        interval_half /= 2/3
        computer_guess = round(interval_half)
        print("Computer guesses {}.".format(computer_guess))
    else:
        interval_half /= 2
        computer_guess = round(interval_half)
        print("Computer guesses {}.".format(computer_guess))

2 个答案:

答案 0 :(得分:3)

Round在Python 3+中无法正常工作:

  

对于支持round()的内置类型,将值四舍五入为与功率减ndigits的最接近的10的倍数; 如果两个倍数相等,则朝着偶数选择进行四舍五入(例如,round(0.5)round(-0.5)均为0,而{{1 }}是round(1.5))。任何整数值都对2有效(正,零或负)。如果使用一个参数调用,则返回值为整数,否则返回与ndigits相同的类型。

https://docs.python.org/3.5/library/functions.html#round

在Python 2中,四舍五入为0.5,

  

返回浮点值number,四舍五入至小数点后number位。如果省略ndigits,则默认为零。结果是一个浮点数。值四舍五入到与幂减ndigits相乘的10的最接近倍数; 如果两个倍数相等,则四舍五入应从0开始(例如,ndigitsround(0.5),而1.0round(-0.5)

https://docs.python.org/2.7/library/functions.html#round

因此,这是由解释器版本差异引起的。

您可能还应该意识到浮点数的局限性:https://docs.python.org/3.5/tutorial/floatingpoint.html#tut-fp-issues

答案 1 :(得分:-1)

编辑:仅当您始终想四舍五入时,以下内容才有帮助:

import math
math.ceil(2.5)  #3
math.floor(2.5  #2

这件适合您的案例的作品:

def myround(n):
    if n * 10 % 10 > 5:
        return math.ceil(n)
    return math.floor(n)