2009-06-11 75 views

回答

5

我不認爲這是一個預定義的格式 - python中的格式是從C繼承而來的,我很確定你沒有在C中擁有所需的格式。現在,在python 3中,你有格式特殊功能,您可以在其中進行自己的格式化。在python去掉最後的零很簡單:只要用剝離法:

a = 1.23040000 
print str(a).rstrip('0') 

如果你想在小數點後保留一個0,這不是很困難的要麼。

+0

好的,太棒了!現在我只需要分別處理1.000000 - > 1.0這種情況,任何簡短的方法,即檢查「。」後面是否只有零。 – zequzd 2009-06-11 14:01:51

+4

我會直接回答:檢測最後一個字符是否是一個點,如果是這種情況,則添加一個0。請記住,這在本地化下不起作用(例如用我的母語法語,我們使用','表示小數點,'。'表示千位分隔符)。 – 2009-06-11 14:11:07

1

'%2.2f'運營商只會做相同數量的小數,無論數量多少顯著的數字了。你將不得不在數字中識別這一點,並手動修改格式。您可能可以通過打印到具有大量小數位的字符串並將所有尾隨零去掉來實現快捷方式。

平凡函數來做到這一點可能看起來像​​下面的示例中:

import re 

foo_string = '%.10f' % (1.33333) 
bar_string = '%.10f' % (1) 

print 'Raw Output' 
print foo_string 
print bar_string 

print 'Strip trailing zeros' 
print re.split ('0+$', foo_string)[0] 
print re.split ('0+$', bar_string)[0] 

print 'Intelligently strip trailing zeros' 
def intel_format (nn): 
    formatted = '%.10f' % (nn) 
    stripped = re.split('0+$', formatted) 
    if stripped[0][-1] == '.': 
     return stripped[0] + '0' 
    else: 
     return stripped[0] 

print intel_format (1.3333) 
print intel_format (1.0) 

運行時,你會得到這樣的輸出:

Raw Output 
1.3333300000 
1.0000000000 
Strip trailing zeros 
1.33333 
1. 
Intelligently strip trailing zeros 
1.3333 
1.0 
+0

謝謝!我也想出了測試,如果float_variable%1 == 0,這樣做。 – zequzd 2009-06-11 14:19:31

9

如何使用十進制模塊?

documentation:。

「十進制模塊具有顯著場所的概念,從而使1.30 + 1.20 2.50尾隨零保持指示意義。這是貨幣應用的習慣表現爲乘法中,「教科書」的方法使用了所有附圖中的被乘數例如,1.3 * 1.2 1.56給出而1.30 * 1.20 1.5600給出

normalize()該函數刪除尾隨零:。

>>> from decimal import * 
>>> d1 = Decimal("1.30") 
>>> d2 = Decimal("1.20") 
>>> d3 
Decimal("1.5600") 
>>> d3.normalize() 
Decimal("1.56") 
+0

是的,這也可能。然而,我必須編寫的程序本質上是科學的,或者與意義無關,這只是一個微不足道的練習,但現在它起作用了。謝謝! – zequzd 2009-06-11 14:21:05

-2
def float_remove_zeros(input_val): 
    """ 
    Remove the last zeros after the decimal point: 
    * 34.020 -> 34.02 
    * 34.000 -> 34 
    * 0 -> 0 
    * 0.0 -> 0 
    """ 
    stripped = input_val 
    if input_val != 0: 
     stripped = str(input_val).rstrip('0').rstrip('.') 
    else: 
     stripped = 0 
    return stripped 
4

我認爲最簡單的方法是「圓」功能。在你的情況下:

>>> round(104.06250000,4) 
104.0625 
0

如果你使用Python 2.6或更高版本,你可以使用字符串方法格式。

>>> print "{0}".format(1.0) 
1.0 
>>> print "{0}".format(1.01) 
1.01 
>>> print "{0}".format(float(1)) 
1.0 
>>> print "{0}".format(1.010000) 
1.01