HOWTO · Java

Formato de moeda em Java

Este artigo apresenta o formato de moeda em Java.

Abaixo estão algumas maneiras pelas quais podemos converter uma moeda para os valores desejados em Java.

Converta a moeda usando funções lógicas em Java

public class CurrencyConversion {
  public static void main(String[] args) {
    double currency_value = 10.9897;
    float epsilon = 0.004f;
    if (Math.abs(Math.round(currency_value) - currency_value) < epsilon) {
      System.out.printf("%10.0f", currency_value);
    } else {
      System.out.printf("%10.2f", currency_value);
    }
  }
}

No código CurrencyConversion acima, há uma variável currency_value, que mantém os valores monetários em formato decimal. O epsilon é outra variável que contém um valor diferente. O valor pode ser qualquer número flutuante que execute algumas operações lógicas sobre sua diferença. A lógica da instrução if é definida para obter o valor absoluto da diferença entre o número arredondado e o real. O valor absoluto é comparado com o valor épsilon. O programa usa a função Math.abs() que converte a diferença real do valor decimal para zero ou maior que zero.

Com base na saída da instrução condicional, ela é impressa no formato como 10.0f ou 10.2f. O especificador de dois formatos fornecido diz, uma parte integrante como 10, o que significa que a string inteira contém dez caracteres. E a parte fracionária especifica o formato até 2 casas decimais.

No log do console abaixo, ele imprime um valor convertido absoluto com até 2 casas decimais.

10.99  //10.9897
10	   //10
10	   //10.0008

No primeiro caso, quando o valor da moeda é 10.9897, é arredondado para 10.99. Além disso, quando o valor da moeda é alterado para 10, a saída ainda retorna 10, pois nada é arredondado na moeda de entrada. E quando o valor da moeda é alterado para 10.0008, o valor é arredondado para o valor 10.

Converter moeda usando a classe NumberFormat em Java

import java.text.NumberFormat;

public class CurrencyConversion {
  public static void main(String[] args) {
    double money = 100.1;
    NumberFormat formatter = NumberFormat.getCurrencyInstance();
    String moneyString = formatter.format(money);
    System.out.println(moneyString);
  }
}

O bloco de código acima usa a classe NumberFormat que chama um método estático da função getCurrencyInstance. O método retorna o formato da moeda do formato na localidade padrão. Também é necessário um valor de localidade para especificar uma região. E as instâncias de moeda podem estar no formato Rupees Dollar com base na área ou região definida. Agora, a instância do formatador é usada para chamar um método de formatação. O método format recebe um parâmetro duplo money e retorna um valor String. A função pode lançar ArithmeticException quando o arredondamento ocorre incorretamente.

O código acima cria a seguinte saída.

Rs.100.10

Mas pode ser diferente quando o valor do local é diferente. A saída pode ser quando o valor local é Locale.CHINA. Ou retorna $ quando o Locale é Locale.CANADÁ.