让我们说我有以下功能将盎司转换为lbs&盎司
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)
我将如何做到这一点?
答案 0 :(得分:1)
首先,您拥有的转换算法不正确。
这一行:
oz, lbs = oz - int(oz), int(oz)
将oz
设置为小数部分的值,并将其余部分和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)