Oto mój kod:
x = 1.0
y = 100000.0
print x/y
Mój iloraz wyświetla się jako 1.00000e-05
.
Czy istnieje sposób, aby usunąć notację naukową i wyświetlić ją jako
0.00001
? Użyję wyniku jako ciągu.
python
floating-point
Matt
źródło
źródło
Odpowiedzi:
ale musisz sam zarządzać precyzją. na przykład,
wyświetli tylko zera.
szczegóły w dokumentacji
Lub w przypadku Pythona 3 równoważne stare formatowanie lub nowsze formatowanie stylu
źródło
Korzystając z nowszej wersji
''.format
(pamiętaj również, aby określić, ile cyfr po.
znaku chcesz wyświetlić, zależy to od tego, jak mała jest liczba zmiennoprzecinkowa). Zobacz ten przykład:jak pokazano powyżej, domyślnie jest to 6 cyfr! Nie jest to pomocne w naszym przykładzie przypadku, więc zamiast tego możemy użyć czegoś takiego:
Aktualizacja
Począwszy od Pythona 3.6, można to uprościć za pomocą nowego sformatowanego literału ciągu w następujący sposób:
źródło
f"{a:.{precision}f}"
W nowszych wersjach Pythona (2.6 i nowsze) możesz
''.format()
osiągnąć to, co zasugerował @SilentGhost:źródło
>>> print('{:f}'.format(0.000000123))
0.000000
'{0:.10f}'
Inną opcją, jeśli używasz pand i chciałbyś wyłączyć notację naukową dla wszystkich pływaków, jest dostosowanie opcji pand.
źródło
Większość powyższych odpowiedzi wymaga określenia precyzji. Ale co, jeśli chcesz wyświetlać takie elementy zmiennoprzecinkowe, bez zbędnych zer:
numpy
ma odpowiedź:np.format_float_positional
źródło
To zadziała dla dowolnego wykładnika:
źródło
To używa odpowiedzi Kapitana Ogórka , ale z 2 dodatkami.
1) pozwalając funkcji na otrzymanie liczb w notacji nienaukowej i po prostu zwrócenie ich bez zmian (więc możesz wrzucić dużo danych wejściowych, że niektóre z liczb to 0,00003123 w porównaniu do 3,123e-05 i nadal funkcja działa.
2) dodano obsługę liczb ujemnych. (w oryginalnej funkcji liczba ujemna kończyłaby się na 0,0000-108904 z -1.08904e-05)
źródło
Oprócz odpowiedzi SG możesz również użyć modułu Decimal:
źródło
Jeśli jest
string
to użyj wbudowanegofloat
na nim do wykonania konwersji, na przykład:print( "%.5f" % float("1.43572e-03"))
odpowiedź:0.00143572
źródło
Ponieważ jest to najlepszy wynik w Google, opublikuję tutaj po nieudanym znalezieniu rozwiązania mojego problemu. Jeśli chcesz sformatować wartość wyświetlaną obiektu zmiennoprzecinkowego i pozostawić ją zmiennoprzecinkową, a nie ciągiem znaków, możesz użyć następującego rozwiązania:
Utwórz nową klasę, która modyfikuje sposób wyświetlania wartości zmiennoprzecinkowych.
Możesz samodzielnie zmodyfikować dokładność, zmieniając wartości całkowite w
{:f}
źródło
Używając 3.6.4, miałem podobny problem, że losowo liczba w pliku wyjściowym byłaby sformatowana przy użyciu notacji naukowej podczas używania tego:
Wszystko, co musiałem zrobić, aby to naprawić, to dodać `` f '':
źródło
Od wersji 3.6 (prawdopodobnie działa również z nieco starszą wersją 3.x), oto moje rozwiązanie:
Celem
precision
obliczeń jest upewnienie się, że mamy wystarczającą precyzję, aby uniknąć stosowania notacji naukowej (domyślna dokładność nadal wynosi 6).dec_precision
Argumentem dodaje dodatkową precyzję używaną do miejsc po przecinku. Ponieważ korzysta zn
formatu, nie zostaną dodane żadne nieznaczące zera (w przeciwieństwie dof
formatów).n
zajmie się również renderowaniem już zaokrąglonych liczb całkowitych bez dziesiętnych.n
wymagafloat
wkładu, więc obsada.źródło