Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Caractere usado no método format()

Olá! Consegui realizar as propostas de atividades da aula 2, entretanto fiquei com dúvida em relação a como funciona o método format(). Foi pedido que a partir de dois valores fosse obtido uma média. Quando fui "imprimir" o resultado eu queria que a média viesse com apenas uma casa decimal, foi quando observei que ao formatar o número o separador de casas decimais, que geralmente é representado pelo ponto final '.', vira uma vírgula ','. Queria saber por que isso acontece e se tem como mudar.

double media = (14.3 + 21.25) / 2;
System.out.println(media); //retorna o valor 17.775
System.out.println(String.format("%.1f",media)); //retorna o valor 17,8

String mediaEmString = "%.1f".formatted(media); //aqui tentei uma outra forma de formatar o valor
System.out.println(mediaEmString); //retorna o valor 17,8
2 respostas
solução!

Olá! Tudo bem? Então, eu descobri que isso ocorre porque o Java se adapta às configurações regionais do sistema. Então quando você passa String.format, ele vem com a vírgula na saída, já que o padrão da nossa região é esse. Você pode ajustar isso utilizando a classe DecimalFormat.

        double media = (14.3 + 21.25) / 2;
        System.out.println(media); //retorna o valor 17.775
        System.out.println(String.format("%.1f",media)); //retorna o valor 17,8

        String mediaEmString = "%.1f".formatted(media); //aqui tentei uma outra forma de formatar o valor

        DecimalFormat formato = new DecimalFormat("0.0", DecimalFormatSymbols.getInstance(Locale.US)); // criando o objeto de acordo com a regiao US e com 1 casa decimail
        String numeroFormatado = formato.format(media); // retornando media formatada com pontinho
        System.out.println(mediaEmString); // 17,8
        System.out.println(numeroFormatado); //retorna o valor 17.8

Muito obrigada, Gibson! Não consegui com o código do jeito que me mandou, ficava apresentando erro. Mas fui ler sobre essa classe, nela dizia que chamar o DecimalFormat direto poderia apresentar erro e que nesse caso bastava chamar a classe da qual ela descende NumberFormat . Então fiz algumas alterações e cheguei em um código que ele aceitou:

double media = (14.3+21.25) / 2;
NumberFormat formato = NumberFormat.getInstance(Locale.ENGLISH);
if (formato instanceof DecimalFormat) {
    ((DecimalFormat) formato).applyPattern("0.0");
}
String numeroFormatado = formato.format(media);
System.out.println(numeroFormatado);