DEV Community

Beatriz Maciel
Beatriz Maciel

Posted on • Updated on

HackerRank #10 | Currency Formatter | 🇧🇷

Este problema solicita um input de valor e devolve um output com a conversões de câmbio dos Estados Unidos, Índia, China e França.

Locale

Existem locales pré definidos, como no caso de US, CHINA e FRANCE. Alguns outros países, como Índia e Brasil, exigem que seja construído um novo Locale. Para isso, usamos a seguinte sintaxe:

Currency.getInstance(new Locale("língua", "País"))

Usando as iniciais corretas, temos os exemplos a seguir:

Hindi/India:

Currency.getInstance(new Locale("hi", "IN"))

Observação: Na saída específica desse exercício tive que trocar a lingua hi (hindi) para en (english) porque os números em hindi são diferentes dos números em inglês. O HackerRank não identificou como uma saída válida nesse caso.

Português/Brasil:

Currency.getInstance(new Locale("pt", "BR"))

=========

NumberFormat

Essa classe abstrata serve para adaptar números para qualquer localidade. Pode trocar . por , ou adicionar alterações e símbolos de cada local.
Os métodos mais importantes dessa classe são:

Use getInstance or getNumberInstance to get the normal number format. Use getIntegerInstance to get an integer number format. Use getCurrencyInstance to get the currency number format. And use getPercentInstance to get a format for displaying percentages. With this format, a fraction like 0.53 is displayed as 53%. (Oracle)

Para fazermos a adaptação de câmbio, usamos o método .getCurrencyInstance() e, dentro dos parênteses, passamos o Locale.

=========

Sendo assim, o código final fica:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double payment = scanner.nextDouble();
        scanner.close();

        NumberFormat us     = NumberFormat.getCurrencyInstance(Locale.US);
        NumberFormat india  = NumberFormat.getCurrencyInstance(new Locale("en", "IN"));
        NumberFormat china  = NumberFormat.getCurrencyInstance(Locale.CHINA);
        NumberFormat france = NumberFormat.getCurrencyInstance(Locale.FRANCE);

        System.out.println("US: " + us.format(payment));
        System.out.println("India: " + india.format(payment));
        System.out.println("China: " + china.format(payment));
        System.out.println("France: " + france.format(payment));
Enter fullscreen mode Exit fullscreen mode

=========

Referências:

============

Essa publicação faz parte de uma série de exercícios resolvidos em Java no HackerRank. Acesse a série completa:

Discussion (0)