2013-01-25 19 views
16

Sto usando BigDecimal per ottenere alcuni valori di prezzo. Il requisito è qualcosa del genere, qualunque sia il valore che recuperiamo dal database, il valore visualizzato dovrebbe avere 2 punti decimali.Come visualizzare un numero con sempre 2 punti decimali usando BigDecimal?

Esempio:

valore inverosimile è 1 - dovrebbe essere visualizzato come 1.00
valore inverosimile è 1,7823 - dovrebbe essere visualizzato come 1,78

Sto usando setScale(2, BigDecimal.ROUND_HALF_UP) ma ancora alcuni posti, se i dati dal DB sono un numero intero, quindi viene visualizzato lo stesso !!

Voglio dire se il valore è 0 da DB è visualizzato solo come 0. Voglio che venga visualizzato come 0.00

Grazie

+1

Penso che si può trovare la risposta giusta qui: http://stackoverflow.com/a/50543/61624 –

+1

grazie daniel:) che era la risposta troppo veloce .. ma sto già usando il bigdecimal.round_half_up con setscale (2) funziona quando si hanno numeri come 2.12 o 4.2343. quando il valore è un numero intero come solo 2 allora voglio che sia visualizzato come 2.00 e questo è dove sto fallendo !! – user1391730

+0

possibile duplicato di [Come si formatta un numero in java?] (Http://stackoverflow.com/questions/50532/how-do-i-format-a-number-in-java) –

risposta

3

È necessario usare qualcosa come NumberFormat con adeguato locale per format

NumberFormat.getCurrencyInstance().format(bigDecimal); 
+1

Questo stamperà la valuta simbolo, ad es $, insieme al numero, che l'OP non ha menzionato che voleva. Ma come l'idea di utilizzare l'istanza di valuta qui per la leggibilità. – pierus

26

BigDecimal è immutabile, qualsiasi operazione su di esso, tra cui setScale (2, BigDecimal .ROUND_HALF_UP) produce un nuovo BigDecimal. codice corretto dovrebbe essere

 BigDecimal bd = new BigDecimal(1); 
//  bd.setScale(2, BigDecimal.ROUND_HALF_UP); bd.setScale does not change bd 
     bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
     System.out.println(bd); 

uscita

1.00 
7

è possibile utilizzare il Round Up formato

BigDecimal bd - new BigDecimal(2.22222); 
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP)); 
2

Per formattare i numeri in JAVA è possibile utilizzare:

System.out.printf("%1$.2f", d); 

dove d è la tua variabile o il numero

o

DecimalFormat f = new DecimalFormat("##.00"); // this will helps you to always keeps in two decimal places 
System.out.println(f.format(d)); 
0

BigDecimal.setScale avrebbe funzionato.