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…
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