1
resposta

Desafio: hora da prática - 6 desafios

Não tive difuldade nas atividades, porem fiquei com duvida de como eu poderia formatar o valor da atividade N6 -
*Declare uma variável do tipo double precoOriginal. Atribua um valor em reais a essa variável, representando o preço original de um produto. Em seguida, declare uma variável do tipo double percentualDesconto e atribua um valor percentual de desconto ao produto (por exemplo, 10 para 10%). Calcule o valor do desconto em reais, aplique-o ao preço original e imprima o novo preço com desconto.

static void main(String[] args) {

    double precoOriginal = 135.00;
    double percentualDesconto = 0.25;

    double precoDesconto = precoOriginal - (precoOriginal * percentualDesconto);
    System.out.println("Valor do produto R$ " + precoOriginal);
    System.out.println("Desconto de  25% OFF");
    System.out.println("O preço final do produto é R$" + precoDesconto);

} 	

// Valor do produto R$ 135.0
   Desconto de  25% OFF
   O preço final do produto é R$101.25

Tive que arrendondar o precoOriginal por que eu tentei usar um valor quebrado e dava um numero muito grande, então tentei usar o DecimalFormat mas ficou dando erro. Tentei assim

static void main(String[] args) {
    double precoOriginal = 134.99;
    double percentualDesconto = 0.25;

    double precoDesconto = precoOriginal - (precoOriginal * percentualDesconto);

    DecimalFormat df = new DecimalFormat("0.00");
    double arredondado = Double.parseDouble(df.format(precoDesconto));

    System.out.println("Valor do produto R$ " + precoOriginal);
    System.out.println("Desconto de  25% OFF");
    System.out.println("O preço final do produto é R$" + precoDesconto);

O erro em questão ficou assim

*Exception in thread "main" java.lang.NumberFormatException: For input string: "101,25"
at java.base/jdk.internal.math.FloatingDecimal.check(FloatingDecimal.java:2324)
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1969)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:971)
at AtividadeU26.main(AtividadeU26.java:21)

1 resposta

Olá, Fabrício! Como vai?

O erro que você está enfrentando ocorre porque o DecimalFormat está formatando o número com uma vírgula, que é o padrão de formatação em alguns locais, mas o Double.parseDouble espera um ponto como separador decimal.

Para resolver isso, você pode formatar o valor diretamente na hora de imprimir, sem precisar convertê-lo de volta para double. Aqui está um exemplo de como você pode fazer isso:

import java.text.DecimalFormat;

public class AtividadeU26 {
    public static void main(String[] args) {
        double precoOriginal = 134.99;
        double percentualDesconto = 0.25;

        double precoDesconto = precoOriginal - (precoOriginal * percentualDesconto);

        DecimalFormat df = new DecimalFormat("0.00");

        System.out.println("Valor do produto R$ " + df.format(precoOriginal));
        System.out.println("Desconto de 25% OFF");
        System.out.println("O preço final do produto é R$ " + df.format(precoDesconto));
    }
}

Com esse código, o DecimalFormat é usado apenas para formatar a saída, e você não precisa converter o valor formatado de volta para double. Isso deve resolver o problema de formatação que você encontrou.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.