Python - 添加小数

时间:2013-09-10 23:53:00

标签: python python-2.7

让我们说我有以下功能将盎司转换为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)

我将如何做到这一点?

1 个答案:

答案 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)