2015-06-28 96 views
1

舍入似乎很容易,但我無法弄清楚如何舍入。Python 2.7:向下舍入而不是向上舍入

使用此代碼:

def __str__(self): 
     return'x = %.2f,y = %.2f'%(self.x,self.y) 

輸出:

>>> p1 = Point(1.216,3.4582) 
>>> print p1 
x = 1.22,y = 3.46 

我怎樣才能返回X = 1.21,而不是1.22和y = 3.45,而不是3.46?

+0

類似於:import math,return'x =%.2f,y =%.2f'round_down%(self.x,self.y)? –

回答

2

你可以這樣做:

return 'x = %.2f, y = %.2f' % (int(self.x * 100)/100.0, 
           int(self.y * 100)/100.0) 

注意,這總是舍入到零,而不是捨去。如果您需要處理負值,這一點很重要。 (即-2.467將顯示爲-2.46)

+0

返回x = 1.00而不是1.21 –

+0

檢查您在正確位置的括號。 – DBrowne

+2

你需要劃分100.0而不是100,它會像廣告 –

1

因爲1.216比1.21更接近1.22,所以你的代碼四捨五入到1.22,如果你有1.213,它會舍入到1.21。所以你的功能目前不是四捨五入,而是四捨五入到最近的一個。

你可以做什麼總是向下取整到2位小數是

int(100*x)/100.0 

總是舍入到零,或

math.floor(100*x)/100.0 

總是向下取整。

所以,你可以有:

正常:

def __str__(self): 
    return'x = %.2f,y = %.2f'%(self.x,self.y) 

始終向零:

def __str__(self): 
    return'x = %.2f,y = %.2f'%(int(100*self.x)/100.0,int(100*self.y)/100.0) 

始終向下取整:

def __str__(self): 
    return'x = %.2f,y = %.2f'%(math.floor(100*self.x)/100.0,math.floor(100*self.y)/100.0) 

總是四捨五入:

def __str__(self): 
    return'x = %.2f,y = %.2f'%(math.ceil(100*self.x)/100.0,math.ceil(100*self.y)/100.0) 

確保有

import math 

,如果你要使用math.floor或math.ceil。