1

假设我有以下将盎司转换为磅和盎司的函数

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)

我该怎么做呢?

4

1 回答 1

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字符串格式来输出它,如下所示:

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)
于 2013-09-11T00:12:26.933 回答