Como exibir adequadamente um preço de até dois decimais (centavos), incluindo zeros à direita em Java?

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

Pergunta

Há uma boa pergunta sobre o arredondamento de decimais em java aqui. Mas eu queria saber como posso incluir os zeros à direita para exibir preços no meu programa como: $ 1,50, $ 1,00

A solução simples de

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

Funciona bem, mas omite o zero à direita se estiver no último lugar decimal. A questão surge no meu programa, apesar de eu usar apenas expressões como esta:

double price = 1.50;

Quando faço cálculos com preços diferentes (adicione, multiplique etc.), o resultado é exibido principalmente assim:

$2.5000000000000003

Portanto, usar o string.format funciona bem para esse fim, mas trunca o exemplo acima

$2.5

Existe uma maneira adequada de mostrar o zero à direita no segundo lugar decimal? Ou ambos os zeros se a saída de um cálculo deve ser

$2.00
Foi útil?

Solução

Eu recomendaria que você faça isso:

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

Isso também tem a virtude do BE Specific. Isso funcionará, por exemplo, se você estiver na zona do euro em vez dos EUA.

Outras dicas

Enquanto outras respostas são perfeitamente válidas (especialmente o de Duffymo), você tem um problema muito maior do que formatar a tela. Você está realmente usando um totalmente errado tipo para uma quantia em dinheiro que é um discreto valor. Em vez de um double, você realmente deve considerar usar um java.lang.BigDecimal.

(Editar: ... ou uma aula de dinheiro bem implementada como Duffymo apontou em um comentário, por exemplo, aulas do JSCIENCE'S monetário módulo ou o mais recente Joda-Money - que ainda precisa ser lançado como uma versão oficial.)

Provavelmente pode ser feito com string.format (...), mas você pode usar DecimalFormat:

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

Você tentou:

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

Isso será o suficiente.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top