2013-05-08 98 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