web-dev-qa-db-fra.com

Comment afficher un nombre avec toujours 2 décimales en utilisant BigDecimal?

J'utilise BigDecimal pour obtenir des valeurs de prix. L'exigence est quelque chose comme ça, quelle que soit la valeur que nous recherchons dans la base de données, la valeur affichée doit avoir 2 décimales.

Par exemple:

la valeur récupérée est 1 - doit être affichée comme 1,00
la valeur récupérée est 1,7823 - devrait être affichée comme 1,78

J'utilise setScale(2, BigDecimal.ROUND_HALF_UP) mais encore quelques endroits, si les données de DB sont un nombre entier alors le même est affiché !!

Je veux dire que si la valeur est 0 à partir de DB, elle s'affiche comme 0 uniquement. Je veux que cela soit affiché comme 0,00

Merci

27
user1391730

BigDecimal est immuable, toute opération y compris setScale (2, BigDecimal.ROUND_HALF_UP) produit un nouveau BigDecimal. Le bon code doit être

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

sortie

1.00
44
Evgeniy Dorofeev

vous pouvez utiliser le format arrondi

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

J'espère que cela vous aidera.

11
corgrin

Pour formater les nombres en Java vous pouvez utiliser:

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

où d est votre variable ou nombre

ou

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

Vous devez utiliser quelque chose comme NumberFormat avec les paramètres régionaux appropriés pour format

NumberFormat.getCurrencyInstance().format(bigDecimal);
2
kosa

BigDecimal.setScale fonctionnerait.

1
lwpro2