HackerRank #10 | Currency Formatter | 🇧🇷
Tags: java, currency, numberformat, locale
Published: 2021-08-26 15:29:05

[Este problema](https://www.hackerrank.com/challenges/java-currency-formatter/problem) 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));
```

=========

#### Referências:
- [NumberFormat](https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html#getCurrencyInstance-java.util.Locale-) : Oracle
- [NumberFormat](https://www.devmedia.com.br/formatando-numeros-com-numberformat/7369) : DevMedia

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

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

- [HackerRank #6 | Scanner e End-of-file](https://dev.to/beatrizmaciel/hackerrank-6-scanner-e-endoffile-462c)
- [HackerRank #7 | Int to String / String to Int](https://dev.to/beatrizmaciel/hackerrank-7-int-em-string-e-vice-versa-4n1e)
- [HackerRank #8 | Date and Time](https://dev.to/beatrizmaciel/hackerrank-8-date-and-time-1f78)
- [HackerRank #9 | Static Initializer Block](https://dev.to/beatrizmaciel/hackerrank-9-static-initializer-block-48ha)
- HackerRank #10 | Currency Formatter
- [HackerRank #11 | DataTypes](https://dev.to/beatrizmaciel/hackerrank-11-datatypes-2e9h)
- [HackerRank #12 | Strings Introduction](https://dev.to/beatrizmaciel/hackerrank-12-strings-introduction-2d1n)
- [HackerRank #13 | Substring Comparisons](https://dev.to/beatrizmaciel/hackerrank-13-substring-comparisons-57ha)
- [HackerRank #14 | Abstract Class](https://dev.to/beatrizmaciel/hackerrank-14-abstract-class-3h5d)
- [HackerRank #18 | BigInteger](https://dev.to/beatrizmaciel/hackerrank-18-biginteger-4jad)
- [HackerRank #19 | Loops II](https://dev.to/beatrizmaciel/hackerrank-19-loops-ii-385n)
- [HackerRank #20 | String Reverse](https://dev.to/beatrizmaciel/hackerrank-20-string-reverse-nec)
- [HackerRank #23 | Instanceof keyword](https://dev.to/beatrizmaciel/hackerrank-23-instanceof-keyword-3lh6)
- [HackerRank #26 | Generics](https://dev.to/beatrizmaciel/hackerrank-26-generics-55p8)
- [HackerRank #27 | 1D Array](https://dev.to/beatrizmaciel/hackerrank-27-1d-array-5f80)
- [HackerRank #28 | Anagrams](https://dev.to/beatrizmaciel/hackerrank-28-anagrams-boi)
- [HackerRank #33 | Arraylist](https://dev.to/beatrizmaciel/hackerrank-33-arraylist-2lj1)
- [HackerRank #34 | Exception Handling Try / Catch](https://dev.to/beatrizmaciel/hackerrank-34-exception-handling-try-catch-144f)
- [HackerRank #36 | Exception Handling](https://dev.to/beatrizmaciel/hackerrank-35-exception-handling-44e)
- [HackerRank #37 | List](https://dev.to/beatrizmaciel/hackerrank-37-list-4gmj)
- [HackerRank #38 | SubArray](https://dev.to/beatrizmaciel/hackerrank-38-subarray-1693)
- [HackerRank #39 | HashSet](https://dev.to/beatrizmaciel/hackerrank-39-hashset-3jb3)
- [HackerRank #40 | Java Dequeue](https://dev.to/beatrizmaciel/hackerrank-40-java-dequeue--497h)