2013-07-10 13 views
5

W Javie Mam następujący kod: stałej szerokości zmiennoprzecinkowy format numeru

System.out.printf("%05.5f", myFloat); 

Działa to dobrze dla dowolnych liczb, które mają mniej niż 10, ale dla dowolnej liczby 10 lub większym, miejsca dziesiętne są przycinane do 5, ale to nie rekompensuje faktu, że liczba przed kropką dziesiętną jest dłuższa. Chciałbym wykonać jedną z następujących czynności:

12.3456 
1.23456 

(czyli taką samą liczbę cyfr) lub:

12.34567 
2.34567 

(tj pad z przestrzeni tak, że punkty dziesiętne i ostatni linia cyfr).

Byłbym szczęśliwy, gdybym mógł dostać się do pracy (obie będą jeszcze lepsze!).

Jakieś myśli? Dzięki!

+0

Albo zadziała. – joshlf

+1

Czy znasz maksymalną szerokość, jakiej będziesz potrzebować? Jeśli tak, użyj tego jako szerokości zamiast 5. –

+0

Masz na myśli "% 05f"? Jeśli tak, to nie działa. Otrzymuję: "29.979748", a następnie "7.449038" (ta sama liczba cyfr po kropce dziesiętnej, ale bez spacji wiodących lub 0). – joshlf

Odpowiedz

7

zorientowali się, jak uzyskać to zrobić:

12.34567 
2.34567 

Biorąc pod uwagę ciąg formatu jak "%x.yf" będzie formatować z minimum szerokości x i post-dziesiętny punkt precyzji y. Ponieważ cyfry kropek dziesiętnych i kropka dziesiętna są liczone w kierunku minimalnej szerokości (x), szerokość musi być co najmniej dwa większa od dokładności. W szczególności, jeśli drukowana jest liczba, która jest szersza niż minimalna szerokość, nie będzie ładnie układać się z sąsiednimi liniami, ponieważ te linie będą krótsze. Na przykład, jeśli spróbujemy drukowania 10.1 a następnie 1.1 o szerokości 3 i dokładnością 1, otrzymamy:

10.1 
1.1 

Jednakże, jeśli używamy szerokość 4, 1.1 zostanie wypełniona, ponieważ nie jest o minimalnej szerokości:

10.1 
1.1 
+0

... a teraz możesz zrozumieć komentarz Teda Hoppa :) –

+0

To, co robię:) ... – joshlf

+0

Nie mogłem tego przekonać, ale nie podałem numeru tak, jak chciałem. Skończyło się na użyciu dwóch ciągów.formatowych wywołań String.format ("%%% 5s", String.format ("% 2.2f", liczba)), aby uzyskać oczekiwane formatowanie. – SnellyBigoda

Powiązane problemy