So come controllare il numero di decimali, ma come controllo il numero di zeri in modo specifico?Stampa float con un numero specifico di zeri
Ad esempio:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
So come controllare il numero di decimali, ma come controllo il numero di zeri in modo specifico?Stampa float con un numero specifico di zeri
Ad esempio:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
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.
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
Grazie! Ho anche pensato di provare se float_variable% 1 == 0, per fare questo. – zequzd
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")
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
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
-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.
–
Penso che il modo più semplice sarebbe la funzione "round". nel tuo caso:
>>> round(104.06250000,4)
104.0625
È 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
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
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). –