可以說我有以下功能轉換盎司磅&盎司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)
我怎麼會去這樣做?
可以說我有以下功能轉換盎司磅&盎司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)
我怎麼會去這樣做?
首先,您擁有的轉換算法不正確。
這條線:
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)
謝謝你幫助我理解! –
'盎司,lbs =盎司 - 整數(盎司),整數(盎司)'請不要插入這樣的東西,如果它不是絕對必要的。 – ThiefMaster
您遇到的部分問題是您的轉換不完全正確。我在下面的回答中提到了這一點。 – 2013-09-11 00:41:24