Come abbreviare il risultato float ottenuto? Ho solo bisogno di 2 cifre dopo il punto. Siamo spiacenti Io davvero non so come spiegarlo meglio in inglese ...Come trasformare un numero float come 293.4662543 in 293.47 in python?
Grazie
Come abbreviare il risultato float ottenuto? Ho solo bisogno di 2 cifre dopo il punto. Siamo spiacenti Io davvero non so come spiegarlo meglio in inglese ...Come trasformare un numero float come 293.4662543 in 293.47 in python?
Grazie
Da del Python cheat sheet The Floating-Point Guida:
"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"
Utilizzando round() è la cosa sbagliata da fare, perché i galleggianti sono binary fractions che non può rappresentare cifre decimali con precisione.
Se è necessario eseguire calcoli con cifre decimali, utilizzare il tipo Decimal
nel modulo decimal
.
Supponendo che sia necessario memorizzare quel risultato per un uso futuro, sarebbe qualcosa come x = "%.2f "funziona, o come usi ancora quei dati, piuttosto che semplicemente stampandoli (come ho visto gli altri qui sotto usano la funzione di stampa) EDIT: probabilmente dovrei semplicemente seguire il tuo link, mi dispiace EDIT di nuovo, scusa ancora non sono sicuro di come la domanda originale che ho chiesto funziona con quella sintassi. +1 come il tuo modo di essere a posto! – onaclov2000
@ onaclov2000: come ho scritto: se hai bisogno di lavorare con i dati decimali, dovresti usare un tipo di dati decimali invece di float. –
>>> print "%.2f" % 293.44612345
293.45
Da: Python Docs round (x [, n]) Restituisce il valore in virgola mobile x Ha arrotondati su n cifre dopo il punto decimale. Se n è omesso, il valore predefinito è zero. Il risultato è un numero in virgola mobile. I valori sono arrotondati al multiplo più vicino di 10 al minimo della potenza n; se due multipli sono ugualmente vicini, l'arrotondamento viene eliminato da 0 (ad esempio, round (0,5) è 1.0 e round (-0.5) è -1.0).
Nota Il comportamento di round() per i float può essere sorprendente: ad esempio, round (2.675, 2) restituisce 2,67 anziché il previsto 2,68. Questo non è un bug: è il risultato del fatto che la maggior parte delle frazioni decimali non può essere rappresentata esattamente come un float. Vedi Aritmetica in virgola mobile: problemi e limitazioni per ulteriori informazioni.
Sembra round (293,466 .... [2]) lo farebbe,
@Shane: no, in realtà non lo è. –
x = round(293.4662543, 2)
Se volete un numero, utilizzare la funzione round()
:
>>> round(12.3456, 2)
12.35
(ma +1 per la risposta di Michael re. il tipo Decimal
.)
Se si desidera una stringa:
>>> print "%.2f" % 12.34567
12.35
Se avete bisogno di numeri come 2.3K o 12M, questa funzione fa il lavoro:
def get_shortened_integer(number_to_shorten):
""" Takes integer and returns a formatted string """
trailing_zeros = floor(log10(abs(number_to_shorten)))
if trailing_zeros < 3:
# Ignore everything below 1000
return trailing_zeros
elif 3 <= trailing_zeros <= 5:
# Truncate thousands, e.g. 1.3k
return str(round(number_to_shorten/(10**3), 1)) + 'k'
elif 6 <= trailing_zeros <= 8:
# Truncate millions like 3.2M
return str(round(number_to_shorten/(10**6), 1)) + 'M'
else:
raise ValueError('Values larger or equal to a billion not supported')
Risultati:
>>> get_shortened_integer(2300)
2.3k # <-- str
>>> get_shortened_integer(1300000)
1.3M # <-- str
Spero che questo vi aiuterà.
def do(*args):
formattedList = [float("{:.2f}".format(num)) for num in args]
_result =(sum(formattedList))
result = round(_result,2)
return result
print(do(23.2332,45.24567,67,54.27))
Risultato:
189.75
Vuoi modificare il valore del risultato per un eventuale uso successivo o semplicemente cambiare ciò stringa decimale viene convertito in? – martineau