Jak skrócić wynik float mam? Potrzebuję tylko 2 cyfry po kropce. Niestety ja naprawdę nie wiem, jak to wytłumaczyć lepiej po angielsku ...Jak zmienić liczbę zmiennoprzecinkową na 293.4662543 na 293.47 w pythonie?
Dzięki
Jak skrócić wynik float mam? Potrzebuję tylko 2 cyfry po kropce. Niestety ja naprawdę nie wiem, jak to wytłumaczyć lepiej po angielsku ...Jak zmienić liczbę zmiennoprzecinkową na 293.4662543 na 293.47 w pythonie?
Dzięki
z pływającą-Point na Python cheat sheet:
"%.2f" % 1.2399 # returns "1.24"
"%.3f" % 1.2399 # returns "1.240"
"%.2f" % 1.2 # returns "1.20"
Korzystanie round() jest niewłaściwy rzeczą do zrobienia, ponieważ pływaki są binary fractions który nie może reprezentować cyfr dziesiętnych dokładnie.
Aby wykonać obliczenia z cyframi dziesiętnymi, należy użyć typu Decimal
w module decimal
.
Przypuśćmy, że musisz zapisać ten wynik do przyszłego użytku, czy coś takiego jak x = "%.2f "praca, czyli jak wciąż korzystasz z tych danych, zamiast po prostu je drukować (jak widziałem inne poniżej wykorzystują funkcję drukowania) EDYCJA: prawdopodobnie powinienem po prostu podążyć za twoim linkiem, przepraszam. EDYTUJ ponownie, przepraszam wciąż nie wiem jak oryginalne pytanie, które zadałam, działa z tą składnią. +1 jak na swój sposób wygląda dobrze! – onaclov2000
@ onaclov2000: jak napisałem: jeśli chcesz pracować z danymi dziesiętnymi, powinieneś używać typu danych dziesiętnych zamiast spławu. –
>>> print "%.2f" % 293.44612345
293.45
Od: Python Docs rundzie (x [n]) zwróci wartość zmiennoprzecinkową x zaokrąglone na n cyfr po przecinku dziesiętnym. Jeśli n zostanie pominięte, domyślnie przyjmuje wartość zero. Wynikiem jest liczba zmiennoprzecinkowa. Wartości są zaokrąglane do najbliższej wielokrotności 10 do potęgi minus n; jeśli dwie wielokrotności są jednakowo bliskie, zaokrąglanie jest wykonywane od 0 (tak na przykład runda (0,5) wynosi 1,0, a runda (-0,5) wynosi -1,0).
Uwaga Zachowanie funkcji round() dla elementów pływających może być zaskakujące: na przykład runda (2.675, 2) daje 2,67 zamiast oczekiwanego 2,68. Nie jest to błąd: wynika to z faktu, że większość ułamków dziesiętnych nie może być przedstawiana dokładnie jako liczba zmiennoprzecinkowa. Zobacz Arytmetyka zmiennoprzecinkowa: Problemy i ograniczenia, aby uzyskać więcej informacji.
Wygląda rundzie (293.466 .... [2]), by to zrobić,
@Shane: nie, tak naprawdę nie jest. –
x = round(293.4662543, 2)
Jeśli chcesz numer, użyj round()
funkcję:
>>> round(12.3456, 2)
12.35
(ale +1 dla odpowiedzi Michaela o typie Decimal
).
Jeśli chcesz ciąg:
>>> print "%.2f" % 12.34567
12.35
Jeśli potrzebujesz numery jak 2.3k lub 12M, funkcja ta spełnia swoje zadanie:
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')
Wyniki:
>>> get_shortened_integer(2300)
2.3k # <-- str
>>> get_shortened_integer(1300000)
1.3M # <-- str
Mam nadzieję, że to pomoże.
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))
Wynik:
189.75
Chcesz zmienić wartość wyniku dla ewentualnego późniejszego wykorzystania lub po prostu zmienić ciąg dziesiętny co to jest przekształcany? – martineau