web-dev-qa-db-fra.com

Formate un BigDecimal en chaîne avec un maximum de 2 décimales, en supprimant 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)

Maintenant, je veux l’imprimer sous forme de chaîne mais en supprimant la partie décimale si elle est 0, par exemple:

1,00 -> 1

1,50 -> 1,5

1,99 -> 1,99

J'ai essayé d'utiliser un formateur, formatter.format mais je reçois toujours les 2 chiffres décimaux.

Comment puis-je faire ceci? Peut-être que vous travaillez sur la chaîne de bd.toPlainString ()?

69
res1

J'ai utilisé DecimalFormat pour formater le BigDecimal au lieu de formater la chaîne, ne semble pas poser de problèmes.

Le code ressemble à ceci:

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);
89
res1
new DecimalFormat("#0.##").format(bd)
60
Federico Cattozzi

Utilisez stripTrailingZeros().

Cet article devrait vous aider.

10
lrAndroid

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

Si son argent utilise:

NumberFormat.getNumberInstance(Java.util.Locale.US).format(bd)
3
Heisenberg