2013-01-25 3 views
16

Używam BigDecimal, aby uzyskać wartości cen. Wymaganie to coś takiego, jakakolwiek wartość pobieramy z bazy danych, wyświetlana wartość powinna mieć 2 miejsca dziesiętne.Jak wyświetlić liczbę z zawsze 2 punktami dziesiętnymi za pomocą BigDecimal?

Np

wartość pobierana jest 1 - powinien być wyświetlany jako 1.00
wartość pobierana jest 1,7823 - powinien być wyświetlany jako 1.78

Używam setScale(2, BigDecimal.ROUND_HALF_UP) ale jeszcze kilka miejsc, jeśli dane z DB są liczbą całkowitą, a ta sama jest wyświetlana !!

Mam na myśli, jeśli wartość jest 0 z DB wyświetlana tylko jako 0. Chcę, które mają być wyświetlane jako 0.00

Dzięki

+1

myślę, że można znaleźć swoją odpowiedź tutaj: http://stackoverflow.com/a/50543/61624 –

+1

dzięki daniel:), która była zbyt szybka odpowiedź .. ale jestem już z użyciem bigdecimal.round_half_up setscale (2) działa, gdy masz numer jak 2,12 lub 4,2343. , gdy wartość jest liczbą całkowitą, taką jak 2, a następnie chcę, aby była wyświetlana jako 2,00, a to jest, gdy zawodzę !! – user1391730

+0

możliwy duplikat [Jak sformatować numer w java?] (Http://stackoverflow.com/questions/50532/how-do-i--format-a-number-in-java) –

Odpowiedz

3

trzeba użyć czegoś jak NumberFormat z odpowiedniej lokalizacji do format

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

To wydrukuje walutę symbol, np $, wraz z liczbą, o której PO nie wspomniał, że chciał. Ale podobnie jak myśl o użyciu instancji waluty tutaj dla czytelności. – pierus

26

BigDecimal jest niezmienna, każdej operacji na nim w tym setScale (2, BigDecimal .ROUND_HALF_UP) tworzy nowy BigDecimal. Poprawny kod powinien być

 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); 

wyjście

1.00 
7

można użyć Round Up formatu

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

do numerów wielkoformatowych w JAVA można użyć:

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

gdzie d jest twoją zmienną lub numerem

lub

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 będzie działać.

Powiązane problemy