2010-08-03 18 views
64

Tengo un campo BigDecimalamount que representa dinero, y necesito imprimir su valor en el navegador en un formato como $123.00, $15.50, $0.33.¿Cómo imprimir valores BigDecimal formateados?

¿Cómo puedo hacer eso?

(La única solución simple que veo yo es cada vez floatValue de BigDecimal y luego usando NumberFormat para hacer una precisión de dos dígitos para la parte fraccionaria).

Respuesta

94
public static String currencyFormat(BigDecimal n) { 
    return NumberFormat.getCurrencyInstance().format(n); 
} 

Utilizará su configuración regional para elegir su símbolo de moneda. NumberFormat's javadoc

30

Otra forma que podría tener sentido para la situación dada es

BigDecimal newBD = oldBD.setScale(2); 

acabo de decir esto porque en algunos casos cuando se trata de dinero que va más allá de 2 cifras decimales no tiene sentido. Teniendo esto un paso más allá, esto podría conducir a

String displayString = oldBD.setScale(2).toPlainString(); 

pero simplemente ha querido destacar el método setScale (que también puede tener un segundo argumento modo de redondeo para controlar cómo se maneja esa última cifra decimal. En algunas situaciones, Java te obliga a especificar este método de redondeo).

26

Para definir el separador de miles, por ejemplo 123,456.78 usted tiene que utilizar DecimalFormat:

 DecimalFormat df = new DecimalFormat("#,###.00"); 
    System.out.println(df.format(new BigDecimal(123456.75))); 
    System.out.println(df.format(new BigDecimal(123456.00))); 
    System.out.println(df.format(new BigDecimal(123456123456.78))); 

aquí está el resultado:

123,456.75 
123,456.00 
123,456,123,456.78 

Aunque me puse #,###.00 máscara, se formatea con éxito los valores más largos también. Tenga en cuenta que el separador de coma (,) en el resultado depende de su configuración regional. Puede ser solo espacio() para la configuración regional rusa.

+11

Si prefiere cero que se mostrará como 0.00 (en lugar de 0,00), utilice el patrón '" # , ## 0.00 "' en su lugar. – Jonik

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN) 
+0

Debe ser BigDecimal (19.001) .setScale (2, BigDecimal.ROUND_HALF_UP) .toString() –

3
BigDecimal pi = new BigDecimal(3.14); 
BigDecimal pi4 = new BigDecimal(12.56); 

System.out.printf("%.2f",pi); 

// imprime 3,14

System.out.printf("%.0f",pi4); 

// imprime 13

Cuestiones relacionadas