Ao instalar o Java no VSCode, ele automaticamente passa a usar as configurações locais de data e separador de decimais.
Importante:
Se você usa o Java no Brasil ou outro país da América do Sul e deseja que o usuário coloque dados usando o padrão americano ou europeu, deve-se usar o método Locale().
Veja o que acontece quando o usuário digita número decimais separado por ponto no Brasil:
import java.util.Scanner;
public class ProblemaComSeparadorDecimal {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Digite um valor decimal (ex: 10.5): ");
try {
double valor = entrada.nextDouble();
System.out.println("Valor digitado: " + valor);
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
System.out.println("Provavelmente você usou o ponto como separador decimal");
System.out.println("No Brasil, o separador decimal padrão é a vírgula (,)");
}
entrada.close();
}
}
Execução no Brasil quando o usuário digita "10.5":
Digite um valor decimal (ex: 10.5): 10.5
Erro: java.util.InputMismatchException
Provavelmente você usou o ponto como separador decimal
No Brasil, o separador decimal padrão é a vírgula (,)
Se o usuário digitar "10,5" (com vírgula), funcionaria corretamente no Brasil.
Usando o método Locale(), agora o usuário pode digitar decimais separados por ponto sem ter o erro de código quando o Java é instalado no Brasil.
import java.util.Scanner;
import java.util.Locale;
public class CorrigindoComLocale {
public static void main(String[] args) {
// Configurando o Scanner para usar o padrão americano (ponto como separador decimal)
Scanner entrada = new Scanner(System.in).useLocale(Locale.US);
System.out.print("Digite um valor decimal (ex: 10.5): ");
try {
double valor = entrada.nextDouble();
System.out.println("Valor digitado: " + valor);
// Calculando o dobro do valor
double dobro = valor * 2;
System.out.println("O dobro é: " + dobro);
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
}
entrada.close();
}
}
Digite um valor decimal (ex: 10.5): 10.5
Valor digitado: 10.5
O dobro é: 21.0
Solução: Com scanner.useLocale(Locale.US), o Scanner irá aceitar o ponto como separador decimal, mesmo em sistemas configurados para usar a vírgula.
Além de afetar a entrada de dados, o Locale também afeta a formatação de números na saída:
import java.text.NumberFormat;
import java.util.Locale;
public class FormatacaoNumeros {
public static void main(String[] args) {
double valor = 1234567.89;
// Formatando números para diferentes locales
// Formatação para os EUA
NumberFormat formatoEUA = NumberFormat.getInstance(Locale.US);
String valorEUA = formatoEUA.format(valor);
// Formatação para o Brasil
NumberFormat formatoBrasil = NumberFormat.getInstance(new Locale("pt", "BR"));
String valorBrasil = formatoBrasil.format(valor);
// Formatação para a Alemanha
NumberFormat formatoAlemanha = NumberFormat.getInstance(Locale.GERMANY);
String valorAlemanha = formatoAlemanha.format(valor);
// Exibindo os resultados
System.out.println("Valor original: " + valor);
System.out.println("Formato EUA: " + valorEUA);
System.out.println("Formato Brasil: " + valorBrasil);
System.out.println("Formato Alemanha: " + valorAlemanha);
// Formatando moedas
System.out.println("\nFormatação de moedas:");
// Moeda dos EUA (dólar)
NumberFormat moedaEUA = NumberFormat.getCurrencyInstance(Locale.US);
String dolar = moedaEUA.format(valor);
// Moeda do Brasil (real)
NumberFormat moedaBrasil = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
String real = moedaBrasil.format(valor);
// Moeda da Alemanha (euro)
NumberFormat moedaAlemanha = NumberFormat.getCurrencyInstance(Locale.GERMANY);
String euro = moedaAlemanha.format(valor);
System.out.println("EUA: " + dolar);
System.out.println("Brasil: " + real);
System.out.println("Alemanha: " + euro);
}
}
Valor original: 1234567.89
Formato EUA: 1,234,567.89
Formato Brasil: 1.234.567,89
Formato Alemanha: 1.234.567,89
Formatação de moedas:
EUA: $1,234,567.89
Brasil: R$ 1.234.567,89
Alemanha: 1.234.567,89 €
Teste seus conhecimentos sobre configuração local de separador de decimais em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: