2013-09-10 37 views
1

可以說我有以下功能轉換盎司磅&盎司Python的 - 添加一個小數

def oz2lboz(oz): 
    oz, lbs = oz - int(oz), int(oz) 

    l = lbs * 0.062500 
    o = oz 

    print "(%d,%d)" % (l,o) 

現在,如果我是來計算oz2lboz(16),它會給我

(1,0) 

不過,我需要它給我,

(1,0.0) 

我怎麼會去這樣做?

+1

'盎司,lbs =盎司 - 整數(盎司),整數(盎司)'請不要插入這樣的東西,如果它不是絕對必要的。 – ThiefMaster

+0

您遇到的部分問題是您的轉換不完全正確。我在下面的回答中提到了這一點。 – 2013-09-11 00:41:24

回答

1

首先,您擁有的轉換算法不正確。

這條線:

oz, lbs = oz - int(oz), int(oz) 

oz是小數部分的值和disguards其餘和lbs到整數部分。然後你乘以1/16,這在大多數情況下會再次給你一個小數部分,這通常不是這種類型的轉換所需要的。

下面我們將改變你原有的代碼返回一個值,提出一個觀點:

def oz2lboz(oz): 
    oz, lbs = oz - int(oz), int(oz) 

    l = lbs * 0.062500 
    o = oz 
    return (l,o) 

而且撥打:

print "(%d,%.1f)" % oz2lboz(16) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(17) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(18) 
>>> (1,0.0) 

嗯,這是不正確的,16,17和18盎司都等於1磅!讓使用花車再試一次,輸出英鎊...

print "(%.1f,%.1f)" % oz2lboz(16) 
>>> (1.0,0.0) 
print "(%.1f,%.1f)" % oz2lboz(17) 
>>> (1.1,0.0) 
print "(%.1f,%.1f)" % oz2lboz(18) 
>>> (1.1,0.0) 

更好,但17和18使用更多的小數位仍然是相同的...我們得到:

print "(%.4f,%.1f)" % oz2lboz(16) 
>>> (1.0000,0.0) 
print "(%.4f,%.1f)" % oz2lboz(17) 
>>> (1.0625,0.0) 
print "(%.4f,%.1f)" % oz2lboz(18) 
>>> (1.1250,0.0) 

所以,基本上除非有一個小數部分你會在幕後進行,因爲轉換是關閉的。

以下我以一種正確且稍微簡單的方式重寫了您的轉換,它再次返回值而不是打印它們,因此您可以根據需要輸出或重用它們。

def oz2lboz(oz): 
    lb=int(oz/16) 
    oz=float(oz%16) 
    return lb,oz 
print oz2lboz(17) 

哪個給出了這樣的輸出:

(1, 1.0) 

然後,您可以使用普通的Python string formatting輸出它根據需要,像這樣:

print "(%d,%.1f)" % oz2lboz(17) #using decimal integer and float formatting 
>>> (1,1.0) 
print "The baby weighed about, %d pounds and %d ounces." % oz2lboz(42) # just decimals 
>>> The baby weighed about, 2 pounds and 10 ounces. 

,或與我們原來的 「有問題」 的數據我們得到了預期的結果:

print "(%d,%.1f)" % oz2lboz(16) 
>>> (1,0.0) 
print "(%d,%.1f)" % oz2lboz(17) 
>>> (1,1.0) 
print "(%d,%.1f)" % oz2lboz(18) 
>>> (1,2.0) 
+0

謝謝你幫助我理解! –