Estou com uma dúvida que acredito, que a maioria já tenha passado por isto aqui.
Preciso formatar um valor monétario, vamos ao exemplo. Tenho um long que representa um valor em real sem pontos decimais.
Ou seja,
// Valor que deveria representar R$ 0,01
long valor = 1;
NumberFormat formatoReal = NumberFormat.getCurrencyInstance();
// Permite no minimo 2 casas decimais de precisão
formatoReal.setMinimumFractionDigits(2);
System.out.println("Valor em Real = " + formatoReal.format(valor));
Essa é a saída deste trecho de código
Mas o resultado esperado é :
Será que isto possível não consegui encontrar nenhum exemplo que funcione como eu preciso. E na documentação não consegui encontrar nenhuma saída para resolver este problema.
Vitor Hugo Brito de Oliveira
Analista Desenvolvedor Java
Até onde eu saiba, NumberFormat não trabalha com a implementação de dinheiro por centavos, como você fez, é sempre por unidades (reais, dólares…). Você precisaria converter o seu valor, que atualmente é um long de centavos, para um double (dividindo o seu valor por 100) ou para um BigDecimal.
Concordo, acredito que 1 é 1 é 0,01 é 0,01 :shock:
import java.text.*;
public class Tx6 {
public static void main (String [] args) {
// Valor que deveria representar R$ 0,01
long valor = 1;
NumberFormat formatoReal = NumberFormat.getCurrencyInstance();
// Permite no minimo 2 casas decimais de precisão
//formatoReal.setMinimumFractionDigits(2);
System.out.println("Valor em Real = " + formatoReal.format((float) valor/100));
}
}
Na verdade, eu até acredito que seja possível implementar algo do tipo numa subclasse de NumberFormat, visto que, quando você usa getPercentInstance e manda ele formatar 0.8, vira 80% . Talvez compense dar uma fuçada.
Obrigado pelas respostas, na segunda resposta consegui matar a charada. Implementei da seguinte maneira pode até não ser a melhor implementação mas funciona. Acredito que você pode melhora-la bastante valeu pela ajuda.
Segue o código em anexo para ajudar outros que tenham a mesma dúvida que eu.
package br.com.decimal.delivery.lab;
import java.math.BigDecimal;
import java.text.NumberFormat;
public class ManipulacaoMonetaria {
public static void main(String [] args){
/**
* 1 - Teste
* O resultado do código abaixo é : 10,00
*/
long valorMoeda1 = 10;
NumberFormat moeda1 = NumberFormat.getNumberInstance();
moeda1.setMinimumFractionDigits(2);
moeda1.setMaximumFractionDigits(2);
String strValorFormatado = moeda1.format(valorMoeda1);
System.out.println("Valor em Real = " + strValorFormatado);
/**
* 2 - Teste
* O resultado do código abaixo é : R$ 10,00
*/
long valorMoeda2 = 10;
NumberFormat moeda2 = NumberFormat.getCurrencyInstance();
System.out.println("Valor em Real = " + moeda2.format(valorMoeda2));
/**
* 3 - Teste
* O resultado do código abaixo é : R$ 1,00
*/
long valorMoeda3 = 100;
NumberFormat moeda3 = NumberFormat.getCurrencyInstance();
BigDecimal valorMoeda3Alterado = new BigDecimal(valorMoeda3);
valorMoeda3Alterado = valorMoeda3Alterado.divide(new BigDecimal(100));
System.out.println("Valor em Real = " + moeda3.format(valorMoeda3Alterado));
}
}