La domanda è per Python 2.6, che è ciò che abbiamo in produzione.Come formattare un numero con virgola e cifre di precisione di cui Python
ho questo requisito per la formattazione di un numero (come 1234567,0987 o 1234567,0) con virgola, e il numero specificato di cifre dopo punto decimale. Quindi, se la precisione è tre, 1234567.0987 può assomigliare a 1.234.567.099.
Ho provato ad utilizzare Locale, come suggerito da risposte a molte domande, il problema è che i risultati a due cifre dopo decimali, che non è accettabile per la mia esigenza.
Ho provato a cercare in altri posti, ma non ha trovato alcuna soluzione, e alla fine ho creato un metodo con il mio:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first/1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
ho cercato di eseguire alcuni test per testare il metodo e funziona benissimo :
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'
# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'
Essendo nuovo per Python, la mia domanda è se questa sia una soluzione accettabile. Poiché questa formattazione deve essere eseguita molte volte in un ciclo continuo, apprezzerei se qualcuno potesse puntare a una soluzione migliore.
Grazie e saluti a tutti
Provalo con '1000000'. –
Mark, grazie. Questo è un buon bug proprio lì, ho bisogno di aggiustarlo. – cspider
Non è necessario utilizzare il modulo 'locale'. Vedere la mia risposta alla domanda [_Che il modo più semplice per aggiungere le virgole per un intero in Python? _] (Http://stackoverflow.com/q/3909457/355230). – martineau