将元组的格式列表设置为1个十进制

时间:2014-04-14 21:41:45

标签: python

如何格式化数字以始终包含1位小数?我有4个数字我想添加到一个元组,每个都有1个小数位。我试过用.format搞乱,但似乎无法让它与元组一起工作。

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)

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

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

中创建tuple([float("{0:.1f}".format(n)) for n in my_tup])

答案 1 :(得分:0)

如果您只想在视觉上看到带有一个小数位的数字,但保留准确性,请使用字符串格式:

print "%.1f" % number

如果您想要对数字进行舍入:     math.round(数字,1)

math.floor和math.ceil将允许严格向下或向上舍入

答案 2 :(得分: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))