2013-05-08 102 views
1

我该如何纠正这个舍入函数?我该如何纠正这个舍入函数?

def round_down(num, prec): 
    uod = round(num, prec) 
    if uod > num: 
     return uod - 1/10^prec 
    return uod 

它提出:类型错误:不支持的操作数类型(一个或多个),用于^: '浮动' 和 'INT'。

+0

给我们一个功能齐全例如,包括您如何调用函数以及您传递的参数。当然,你的特定问题只是当你指'**'时你正在尝试使用'^'。 – 2013-05-08 14:41:03

+1

,正如@mgilson指出的那样,使用“1./10.''使得python使用浮点数而不是整数更安全(在这种情况下结果将是”0“) – Schorsch 2013-05-08 14:47:47

+0

做出校正print(round_down(8.4789,2))根据需要给出8.47。我只是认为问题更加深刻。一定要小心这些假设! – mistermarko 2013-05-08 14:52:50

回答

8

^并不意味着你的想法。改为使用**

From the Python documentation

The ^ operator yields the bitwise XOR (exclusive OR) of its arguments, which must be plain or long integers.

此外,作为mgilson指出,1/10将等于0在Python 2.x中,所以要使用1.0/10代替:

def round_down(num, prec): 
    uod = round(num, prec) 
    if uod > num: 
     return uod - 1.0/10 ** prec 
    return uod 
+1

还有一个小问题,在python2.x中,'1/10'将始终为'0' – mgilson 2013-05-08 14:44:21

+0

感谢您的支持,我将使用1./10,不过我使用的是Python 3。 – mistermarko 2013-05-08 14:56:56