Cómo mostrar correctamente un precio de hasta dos decimales (centavos de dólar), incluyendo los ceros a la derecha en Java?

StackOverflow https://stackoverflow.com/questions/1734282

Pregunta

No es una buena pregunta sobre el redondeo de decimales en Java aquí.Pero me preguntaba ¿cómo puedo incluir los ceros a la derecha para mostrar los precios en mi programa como:$1.50, $1.00

La solución simple de

String.format("%.2g%n", 0.912385);

funciona bien, pero se omite la parte final de cero si es que en el último decimal.El problema viene en mi programa, a pesar de que sólo el uso de expresiones como esta:

double price = 1.50;

Cuando hago cálculos con diferentes precios (sumar, multiplicar, etc.) el resultado es principalmente muestra así:

$2.5000000000000003

Así, el uso de la Cadena.formato funciona bien para este propósito, pero se trunca el ejemplo anterior, para

$2.5

Es allí una manera adecuada para mostrar al final el cero en el segundo decimal?O ambos ceros si el resultado de un cálculo debe ser

$2.00
¿Fue útil?

Solución

Yo recomendaría que hacer esto:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));

Esto tiene la virtud de ser específica para la localización también. Esto funciona, por ejemplo, si estás en la zona euro en lugar de los EE.UU..

Otros consejos

Mientras que otras respuestas son perfectamente válidos (especialmente duffymo uno), usted tiene un problema mucho más grande que el formato de la pantalla.En realidad se está utilizando un totalmente mal tipo de una cantidad de dinero que es un discretos valor.En lugar de una double, usted realmente debería considerar el uso de un java.lang.BigDecimal.

(EDICIÓN:...o bien implementado el Dinero de la clase como duffymo señaló en un comentario, por ejemplo clases de JScience del monetaria módulo o la más reciente Joda-Dinero - que aún no se ha lanzado como una versión oficial.)

Probablemente se puede hacer con String.Format (...), pero se puede usar DecimalFormat :

double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50

¿Has probado:

String s = String.format("$%.2f", 2.50);

Esto hará el truco.

public static String getFormattedData(String actualString) 
    {
        String subString = "0.0";

        if(actualString.contains("."))
        {   
            subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); 

            if(Double.parseDouble(subString) > 0.0)
                return actualString;
            else
                actualString = actualString.substring(0, actualString.indexOf("."));
        }
        return actualString;
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top