89 votes

Formatage d'une BigDecimal sous forme de chaîne de caractères avec au maximum 2 chiffres décimaux, en supprimant le 0 sur la partie décimale

J'ai un nombre BigDecimal et je ne considère que 2 décimales, donc je le tronque en utilisant :

bd = bd.setScale(2, BigDecimal.ROUND_DOWN)

Je veux maintenant l'imprimer sous forme de chaîne de caractères, mais en supprimant la partie décimale si elle est égale à 0, par exemple :

1.00 -> 1

1.50 -> 1.5

1.99 -> 1.99

J'ai essayé d'utiliser un formateur, formatter.format, mais j'obtiens toujours les deux chiffres décimaux.

Comment faire ? Peut-être en travaillant sur la chaîne de bd.toPlainString() ?

115voto

res1 Points 636

J'ai utilisé DecimalFormat pour formater le BigDecimal au lieu de formater le String Il semble qu'il n'y ait aucun problème.

Le code est à peu près le suivant :

bd = bd.setScale(2, BigDecimal.ROUND_DOWN);

DecimalFormat df = new DecimalFormat();

df.setMaximumFractionDigits(2);

df.setMinimumFractionDigits(0);

df.setGroupingUsed(false);

String result = df.format(bd);

79voto

Federico Cattozzi Points 101
new DecimalFormat("#0.##").format(bd)

16voto

Le code ci-dessous peut vous aider.

protected String getLocalizedBigDecimalValue(BigDecimal input, Locale locale) {
    final NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
    numberFormat.setGroupingUsed(true);
    numberFormat.setMaximumFractionDigits(2);
    numberFormat.setMinimumFractionDigits(2);
    return numberFormat.format(input);
}

12voto

lrAndroid Points 1889

Utilisation stripTrailingZeros() .

Le présent devrait vous aider.

4voto

Mr. White Points 82

S'il s'agit d'argent, utilisez-le :

NumberFormat.getNumberInstance(java.util.Locale.US).format(bd)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X