2014-04-14 20 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))