2012-04-22 165 views
56

Tengo un número BigDecimal y considero solamente 2 decimales de la misma manera trunco ​​usando:Formato de un BigDecimal como cadena con un máximo de 2 dígitos decimales, la eliminación de 0 en la parte decimal

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

Ahora quiero imprimirlo como cadena, pero la eliminación de la parte decimal si es 0, por ejemplo:

1.00 -> 1

1.50 -> 1,5

1.99 -> 1.99

Intenté usar un Formatter, formatter.format pero siempre obtengo los 2 dígitos decimales.

¿Cómo puedo hacer esto? Tal vez trabajando en la cadena de bd.toPlainString()?

Respuesta

71

Utilicé DecimalFormat para formatear BigDecimal en lugar de formatear la Cadena, parece que no hay problemas con ella.

El código es algo como esto:

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

¿Cuál es el resultado que se espera para este programa. Obtuve los mismos requisitos que los ceros finales después del punto decimal, pero los ceros al final como **. 00 ** truncan en la salida. –

+1

@ParameshKorrakuti 'df.setMinimumFractionDigits (2)' funciona bien sin setScale y setGrouping y setMaxFrac. –

+3

El formato decimal es NumberFormat en disfraz. Use 'NumberFormat numberFormat = NumberFormat.getPercentInstance();' then 'numberFormat.setMinimumFractionDigits (2);' then 'String percent = numberFormat.format (yourBigDecimal);' –

6

Use stripTrailingZeros().

This artículo debería ayudarlo.

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

Uso 'new DecimalFormat (" 0.00 ")' si quiero para garantizar que siempre se muestran los dos lugares decimales, por ejemplo '1000.5' se mostrará como' 1000.50'. –

+1

@ La solución de ChrisParton funciona perfectamente, además de que si alguien necesita aplicar la localización, podemos usar la siguiente lógica. 'import java.math.BigDecimal; import java.text. *; public class {LocalizeExample public void main (String [] args) {estáticas 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 (resultado); } } ' –

6

El código siguiente puede ayudarle.

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

Si su uso de dinero:

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