Mam wartość 25.00
w float
, ale kiedy drukuję to na ekranie, jest 25.0000000
.
Jak mogę wyświetlić wartość tylko z dwoma miejscami po przecinku?
objective-c
formatting
floating-point
mskfisher
źródło
źródło
Odpowiedzi:
To nie jest kwestia sposobu przechowywania numeru, to kwestia sposobu jego wyświetlania. Konwertując go na ciąg, należy zaokrąglić do pożądanej precyzji, która w Twoim przypadku to dwa miejsca po przecinku.
Na przykład:
%.02f
mówi formatyzatorowi, że sformatujesz zmiennoprzecinkową (%f
) i że należy go zaokrąglić do dwóch miejsc i uzupełnić klawiszem0
s.Na przykład:
źródło
25
...@"%.f"
robi lewę. To, co napisano powyżej, nie ma .@"%.*f", decimalPlaces, number
%03.f = 025
Oto kilka poprawek
Szybki 3
Obj-C
i tak dalej...
źródło
Możesz także spróbować użyć NSNumberFormatter:
Być może trzeba również ustawić format ujemny, ale myślę, że jest wystarczająco inteligentny, aby to rozgryźć.
źródło
Zrobiłem szybkie rozszerzenie w oparciu o powyższe odpowiedzi
stosowanie:
źródło
W Swift Language, jeśli chcesz pokazać, musisz go używać w ten sposób. Aby przypisać podwójną wartość w UITextView, na przykład:
Jeśli chcesz wyświetlać w LOG podobnie jak cel c przy użyciu NSLog (), to w Swift Language możesz to zrobić w następujący sposób:
źródło
W celu-c, jeśli masz do czynienia ze zwykłymi tablicami znaków (zamiast wskaźników do NSString), możesz również użyć:
OTOH, jeśli chcesz przechowywać tę wartość w tablicy char, której możesz użyć:
źródło
Problem z wszystkimi odpowiedziami polega na tym, że mnożenie, a następnie dzielenie wyników w kwestiach precyzji, ponieważ użyłeś podziału. Nauczyłem się tego dawno temu z programowania na PDP8. Sposobem na rozwiązanie tego jest:
Zatem 15.6578 zwraca tylko 15,66, a nie 15.6578999 lub coś niezamierzonego.
Jaki poziom precyzji zależy od Ciebie. Po prostu nie dziel produktu, pomnóż go przez ekwiwalent dziesiętny. Nie jest wymagana żadna śmieszna konwersja ciągów.
źródło
w celu -c chcesz wyświetlić wartość zmiennoprzecinkową w 2 liczbach dziesiętnych, a następnie przekazać argument wskazujący, ile punktów dziesiętnych chcesz wyświetlić, np. 0,02f wydrukuje 25,00 0,002f wydrukuje 25 000
źródło
Oto kilka metod dynamicznego formatowania zgodnie z precyzją:
na przykład
=> 2,3453
=> 2
=> 2,35 (zaokrąglenie w górę)
źródło
Kolejna metoda dla Swift (bez użycia NSString):
PS to rozwiązanie nie działa z typem CGFloat przetestowanym tylko z
Float
&Double
źródło
Użyj
NSNumberFormatter
zmaximumFractionDigits
jak poniżej:I dostaniesz
12.35
źródło
Jeśli chcesz również zmienić wartość:
źródło
źródło