2013-07-10 13 views
5

In Java, ho il codice seguente: larghezza fissa virgola mobile formato numerico

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

Questo funziona bene per tutti i numeri che sono meno di 10, ma per qualsiasi numero di 10 o superiore, le cifre decimali sono tagliati a 5, ma ciò non compensa il fatto che il numero prima del punto decimale è più lungo. Mi piacerebbe fare una delle seguenti:

12.3456 
1.23456 

(vale a dire, lo stesso numero di cifre), oppure:

12.34567 
2.34567 

(vale a dire, il rilievo con spazi in modo che i punti decimali e l'ultimo cifre allineate).

Sarei felice se potessi arrivare a lavorare (entrambi sarebbero anche meglio!).

Qualche idea? Grazie!

+0

O avrebbe funzionato. – joshlf

+1

Conosci la larghezza massima di cui avrai bisogno? Se è così, basta usarlo come larghezza invece di 5. –

+0

Vuoi dire "% 05f"? Se è così, non funziona. Ottengo: '29.979748' e poi' 7.449038' (stesso numero di cifre dopo il punto decimale, ma senza spazi iniziali o 0). – joshlf

risposta

7

ho capito come farlo fare:

12.34567 
2.34567 

Data una stringa di formato come "%x.yf", sarà formato con minima larghezza x, e post-decimale-punto precisione y. Poiché le cifre del punto pre-decimale e il punto decimale vengono conteggiati verso la larghezza minima (x), la larghezza deve essere almeno due più grande della precisione. In particolare, se viene stampato un numero che è più largo della larghezza minima, non si allinea bene con le linee adiacenti poiché quelle linee saranno più corte. Ad esempio, se cerchiamo di stampa 10.1 e poi 1.1 con una larghezza di 3 e una precisione di 1, avremo:

10.1 
1.1 

Tuttavia, se usiamo una larghezza di 4, viene arrotondato 1.1 perché non è della larghezza minima:

10.1 
1.1 
+0

... e ora puoi capire il commento di Ted Hopp :) –

+0

Quello che faccio:) ... – joshlf

+0

Non riuscivo a far funzionare tutto questo semplicemente non era il numero di padding come volevo. Ho finito per utilizzare due string.format chiamate String.format ("%%% 5s", String.format ("% 2.2f", numero)) per ottenere la formattazione che mi aspettavo. – SnellyBigoda