Casas decimais

public class Desafio_0003 {
 public static void main(String[] args){
double nota1 = 5.0, nota2 = 3.0,nota3 = 7.0;
double media = nota1 + nota2 + nota3 /3;
String Aluno = "Aluno";
System.out.println("desafio java".toUpperCase());
System.out.println("Aluno: Aluno\nnota1= 7.0\nnota22= 2.0\nnota3= 8.0".toUpperCase());
if((media >= 5.0))
{
System.out.println("O Aluno: " + Aluno +" foi aprovado com nota de:" + media);
}
else
{
System.out.println("O Aluno: " + Aluno +" foi reprovado com nota de:" + media);
}
}

}

Quando o programa me da o resultado ele vem com o final assim = O aluno foi aprovado com nota de:10.333333333333334 (como eu retiro esse tanto de casas decimais)?

Notei que está fazendo a operação de uma forma na qual pode haver imprecisões, o ideal seria fazer da seguinte forma…

Ex.

double media = (nota1 + nota2 + nota3) / 3


Use o método String.format() da seguinte forma:

if((media >= 5.0)) {
   System.out.println("O Aluno: " + Aluno +" foi aprovado com nota de:" + String.format("%.2f, media"));
} else {
   System.out.println("O Aluno: " + Aluno +" foi reprovado com nota de:" + String.format("%.2f, media"));
}

Onde o %.2f é a String de formatação e o “.2” é o número de casas deciis que terá na formatação.

Olá tudo bem!

Tenta usar assim:

import java.text.DecimalFormat;

public class Desafio_0003 {
public static void main(String[] args) {
double nota1 = 5.0, nota2 = 3.0, nota3 = 7.0;
double media = nota1 + nota2 + nota3 / 3;
String Aluno = “Aluno”;
System.out.println(“desafio java”.toUpperCase());
System.out.println(“Aluno: Aluno\nnota1= 7.0\nnota22= 2.0\nnota3= 8.0”.toUpperCase());

    if ((media >= 5.0)) {
        System.out.println("O Aluno: " + Aluno + " foi aprovado com nota de:" + new DecimalFormat("#0.##").format( media ));
    } else {
        System.out.println("O Aluno: " + Aluno + " foi reprovado com nota de:" + new DecimalFormat("#0.##").format( media ));
    }
}

}

Qualquer dúvida acessa o artigo, tem uma explicação bem legal sobre formatação de números reais:

1 curtida

Pode tentar utilizar o tipo de dados “float” no lugar de “double”. Como vc irá trabalhar com poucas casas decimais creio que já será o suficiente. Além do mais tem suporte para esse tipo em banco de dados como o mysql por exemplo. Menos dor de cabeça…:wink:

No entanto se quiser retirar essas casas decimais com o “double” mesmo vá de “decimal format”. Segue o exemplo

// convertendo a entrada para Double e em seguida formatando para 2 casas decimais…

                    double numero = Double.parseDouble(preco.getText().toString());
                    DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(new Locale("en", "US")));
                    df.setMaximumFractionDigits(2);
                    df.setGroupingUsed(false); // Preste atenção nessa linha
                    df.setRoundingMode(RoundingMode.DOWN);
                    numero = Double.valueOf(df.format(numero));

Dica:
Quando você divide por um número inteiro, o resultado sempre será um número inteiro.
Mesmo a variável media sendo double, o divisor é um int, então media vai receber um valor inteiro (vai ser um double terminando com ponto zero).
Para resolver, faça assim:

double media = (nota1 + nota2 + nota3) / 3.0;

ou assim:

double media = (nota1 + nota2 + nota3) / (double) 3;

2 curtidas

DecimalFormat decimal = new DecimalFormat("#,###,###0.00");

    NumberFormatter numFormatter = new NumberFormatter(decimal);
    numFormatter.setFormat(decimal);
    numFormatter.setAllowsInvalid(false);
    DefaultFormatterFactory dfFactory = new DefaultFormatterFactory(numFormatter);
    jFormattedTextField1.setFormatterFactory(dfFactory);
    txt_custo.setFormatterFactory(dfFactory);

Parabéns pela postagem! Estava procurando essa formatação para objetos JTextField!
Obrigada!

Vou postar como empreguei a conversão num conversor célsius fahrenheit:

JButton btnNewButton = new JButton(“Converter”);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Double fahrenheit = Double.parseDouble(valor.getText());
Double celsius = (fahrenheit - 32) /1.8;
resultado.setText(new DecimalFormat("#.##").format(celsius) + " °C");
}

1 curtida