Pytanie dotyczy Pythona 2.6, czyli tego, co mamy w produkcji.Jak sformatować liczbę przecinkami i określoną dokładnością cyfr w Pythonie
Mam to wymaganie, aby sformatować liczbę (np. 1234567.0987 lub 1234567.0) za pomocą przecinka i określoną liczbę cyfr po przecinku dziesiętnym. Tak więc, jeśli precyzja wynosi trzy, 1234567.0987 może wyglądać jak 1 234 577,099.
Próbowałem używać ustawień regionalnych, jak sugerują odpowiedzi na wiele pytań, problem polega na tym, że wyniki są dwuznaczne po przecinku, co jest niedopuszczalne w przypadku moich wymagań.
Próbowałem szukając w innych miejscach, ale nie znaleźliśmy żadnego rozwiązania, a na końcu stworzyłem metodę przez mój własny:
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
Próbowałem uruchomić kilka testów, aby przetestować metodę i działa dobrze :
# 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'
Będąc nowością w Pythonie, moje pytanie brzmi, czy jest to dopuszczalne rozwiązanie. Ponieważ formatowanie to musi odbywać się wiele razy w ciasnej pętli for, byłbym wdzięczny, gdyby ktoś wskazał lepsze rozwiązanie.
Dzięki i Pozdrowienia dla wszystkich
Wypróbuj za pomocą '1000000'. –
Mark, dziękuję. To jest jeden dobry błąd, muszę to naprawić. – cspider
Nie musisz używać modułu 'locale'. Zobacz moją odpowiedź na pytanie [_Jaka jest najprostsza metoda dodawania przecinków do liczby całkowitej w Pythonie?] (Http://stackoverflow.com/q/3909457/355230). – martineau