2012-04-22 11 views
56

Ho un certo numero BigDecimal e mi considero solo 2 decimali di esso in modo che io troncano utilizzando:formato un BigDecimal as String con max 2 cifre decimali, la rimozione di 0 sulla parte decimale

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

Ora voglio stamparlo come stringa, ma rimuovendo la parte decimale se è 0, ad esempio:

1.00 -> 1

1.50 -> 1.5

1.99 -> 1.99

Ho provato a utilizzare un formattatore, formatter.format ma ottengo sempre le 2 cifre decimali.

Come posso fare questo? Magari lavorando sulla stringa da bd.toPlainString()?

risposta

71

Ho usato DecimalFormat per la formattazione di BigDecimal invece di formattare la stringa, non sembra avere problemi con esso.

Il codice è qualcosa di simile:

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

Qual è l'uscita prevista per questo programma. Ho ottenuto gli stessi requisiti per gli zeri finali dopo il punto decimale, ma gli zero finali erano pari a **. 00 ** troncando in uscita. –

+1

@ParameshKorrakuti 'df.setMinimumFractionDigits (2)' funziona bene senza setScale e setGrouping e setMaxFrac. –

+3

Il formato decimale è NumberFormat sotto mentite spoglie. Usa 'NumberFormat numberFormat = NumberFormat.getPercentInstance();' then 'numberFormat.setMinimumFractionDigits (2);' then 'String percent = numberFormat.format (yourBigDecimal);' –

6

Utilizzare stripTrailingZeros().

This articolo dovrebbe aiutarti.

45
new DecimalFormat("#0.##").format(bd) 
+28

Io uso 'new DecimalFormat (" 0.00 ")' Se voglio per garantire che le due cifre decimali siano sempre visualizzate, ad es '1000.5' verrà visualizzato come' 1000.50'. –

+1

@ La soluzione di ChrisParton funziona perfettamente, in aggiunta a ciò se alcuni richiedono di applicare la localizzazione, possiamo usare la logica sottostante. 'importa java.math.BigDecimal; import java.text. *; public class LocalizeExample { void main (String [] args) {public static BigDecimal bd = new BigDecimal ("123.10"); DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance (Locale.GERMAN); decimalFormat.applyPattern ("# 0.00"); String result = decimalFormat.format (bd); System.out.println (risultato); } } ' –

6

Il codice qui sotto può aiutare.

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

Se il suo uso di denaro:

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