2014-04-14 23 views
-1

如何格式化数字以始终保留1位小数?我有4个数字我想添加到一个元组,每个都有一个小数位。我试图搞乱.format,但似乎无法让它与一个元组一起工作。将元组的格式列表设置为1位十进制

a = 1 
b = 2 
c = 3 
d = 4.44 
my_tup = (a,b,c,d) 

而且我希望my_tup的格式如此。 (1.0,2.0,3.0,4.4)

感谢您的帮助!

+1

你是不是格式化的元组。你在一个元组内部格式化一系列数字。而且,元组是不可变的,所以你想在把它们放入元组之前这样做。另外,从您的问题中不清楚您是要格式化数字还是修剪数字。 (如在后一种情况下,1 == 1.0) – njzk2

回答

3
a, b, c, d = 1, 2, 3, 4.44 
my_tup = (a, b, c, d) 
my_tup = tuple([float("{0:.1f}".format(n)) for n in my_tup]) 

然而,tuple是不可变的序列,所以你不能改变它,你已经创建后。在把它们放入一个元组之前,让你的数字格式正确可能会更好;这也将避免整个(丑)创建list然后在tuple([float("{0:.1f}".format(n)) for n in my_tup])

+0

谢谢,作品像一个魅力! – user3533755

+1

另一个解决方案是在你的情况下从列表中创建一个元组,如map(“{:。1f}”.format,my_tup)',就像我的解决方案一样。我更喜欢'decimal.Decimal',因为这些数字应该明确地避免浮点数学!很好的答案,+1 –

0

从中创建一个tuple如果你只希望看到一个小数位视觉上的数字,但保持精度,使用字符串格式化:

print "%.1f" % number 

如果你想圆数: math.round(数量1)

math.floor和math.ceil将使严格舍向上或向下

0

decimal是正确的解决方案,因为这些是十进制数字而非浮点数。

import decimal 

a, b, c, d = 1, 2, 3, 4.44 
my_tup = tuple(map(decimal.Decimal, map("{:.1f}".format, [a,b,c,d]))) 

这基本上是:

a, b, c, d = 1, 2, 3, 4.44 

# strip the nonsignificant digits 
a = "{:.1f}".format(a) # 1.0 
b = "{:.1f}".format(b) # 2.0 
c = "{:.1f}".format(c) # 3.0 
d = "{:.1f}".format(d) # 4.4 

my_tup = (decimal.Decimal(a), decimal.Decimal(b), 
      decimal.Decimal(c), decimal.Decimal(d))