2009-06-11 2 views

risposta

5

Io non credo che ci sia un formato predefinito per questo - il formato in python è ereditato da C, e sono abbastanza sicuro che non hai il formato desiderato in C.

Ora, in python 3, hai il format funzione speciale, dove è possibile eseguire la propria formattazione. La rimozione degli ultimi zeri in Python è molto semplice: basta usare il metodo della striscia:

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

Se si desidera mantenere un 0 dopo la virgola, che non è molto difficile sia.

+0

Ok, fantastico! Ora devo solo gestire la situazione 1.000000 -> 1.0 separatamente, qualsiasi modo breve per farlo, controllando se ci sono solo zeri dopo "."? – zequzd

+4

Vorrei andare per la semplice risposta: rilevare se l'ultimo carattere è un punto e aggiungere uno 0 se questo è il caso. Tieni presente che questo non funzionerà in base alla localizzazione (ad esempio nella mia lingua nativa, il francese, usiamo "," per il punto decimale e "." Per il separatore di migliaia). –

1

L'operatore '%2.2f' farà solo lo stesso numero di decimali indipendentemente dal numero di cifre significative del numero ha. Dovrai identificare questo nel numero e frigare manualmente il formato. Potresti essere in grado di tagliare questo valore stampando su una stringa con un numero elevato di cifre decimali e rimuovere tutti gli zeri finali.

Una funzione banale per fare questo potrebbe essere simile intel_format() nel campione di seguito:

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) 

quando corsa, si ottiene questa uscita:

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

Grazie! Ho anche pensato di provare se float_variable% 1 == 0, per fare questo. – zequzd

9

Come utilizzare il modulo decimale?

Dal documentation:...

"Il modulo decimale incorpora una nozione di luoghi significativi in ​​modo che 1.30 + 1.20 è 2.50 La zero finale è tenuto ad indicare il significato Questa è la presentazione consueto per le applicazioni monetaria per la moltiplicazione , l'approccio “scolastico” usa tutte le figure nelle multiplicands Ad esempio, 1.3 * 1.2 dà 1,56 mentre 1.30 * 1.20 spedisce 1.5600 "

la funzione normalize() rimuove zeri finali:..

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

Sì, questo potrebbe anche.Tuttavia, il programma che dovevo scrivere era di natura scientifica o non aveva nulla a che fare con il significato, era piuttosto un esercizio banale, ma ora funziona. Grazie! – zequzd

-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 
+0

-1: Dalla domanda: quando il float è 104.06250000 il programma deve stampare 104.0625 ... 119.00000 o 72.000000 ... dovrebbe ... [essere] 119.0 e 72.0.

4

Penso che il modo più semplice sarebbe la funzione "round". nel tuo caso:

>>> round(104.06250000,4) 
104.0625 
0

È possibile utilizzare il formato del metodo stringa se si utilizza Python 2.6 e versioni successive.

>>> 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