2012-06-24 99 views
4

我在Python中有一些Decimal實例。我希望將它們格式化爲:Python格式小數與最小數量的小數位數

Decimal('1')  => '1.00' 
Decimal('12.0') => '12.00' 
Decimal('314.1') => '314.10' 
Decimal('314.151') => '314.151' 

因此確保始終存在至少兩位小數,可能更多。雖然不存在將小數位舍入到n的解決方案,但我不能找到確保數字下限的方法。

我目前的解決方案是計算:

first = '{}'.format(d) 
second = '{:.2f}'.format(d) 

,並採取其有史以來兩個較長。不過,它似乎有點ha。。

+2

你的方式對我來說很好。你可以做'max((first,second),key = len)'。 – katrielalex

+0

我假設你的意思是十進制(浮點數)而不是十進制(字符串)。無論哪種方式,你可以在字符串上調用float()。 – C0deH4cker

+1

小數點位於'從十進制小數點開始小數點',這與浮點數非常不同。 –

回答

1

如果你想避免串的問題:

if d*100 - int(d*100): 
    print str(d) 
else: 
    print ".2f" % d 

未經測試的代碼,但它應該工作

這工作像這樣:

d = 12.345

時報100:

1234.5

減號INT(1234.5)

1234.5 - 1234 = 0.5

.5!= 0

這意味着有3個或更多的小數位。

打印STR(12.345)

即使你12.3405:

1234.05 - 1234 = 0.05

0.05 = 0

但如果你有12.3:

1230 - 1230 = 0

這意味着要用%.2f打印。