Saudações a todos,
estou começando em java e ao construir uma pequena aplicação para calcular expressões matemáticas me deparei com uma dificuldade. Toda linguagem usa o parÊntese para quebrar prioridade dos operadores. Ao rodar o programa a seguir obtenho um resultado errado. Pergunto: Porque ele não calcula o valor correto ?
double d1,d2;
d2 = 500;
d1 = d2 - d2*50/100;
System.out.println("O valor de d2: "+d2);
System.out.println("O valor de d1: "+d1);
o resultado mostrado de d1 é 500
Aqui ta aparecendo 250.0, e pelo que vi esse é o resultado esperado. Você está exibindo primeiro d2 e depois d1, não seria a ordem de exibição que está lhe confundindo?
Está correto, o valor de d1 = 250 e d2 = 500.
desculpem amigos, copiei e colei a parte do código que está funcionando correto.
o problema acontece quando coloco parenteses como a seguir:
double d1,d2;
d2 = 500;
d1 = d2 - d2*(50/100);
System.out.println("O valor de d2: "+d2);
System.out.println("O valor de d1: "+d1);
o resultado mostrado de d1 é 500
Olhe isso: (50/100)
O resultado dessa conta não é um valor inteiro, creio que está arredondando para 0 e imprimindo só a parcela de d2 na fórmula.
ok amigo, entendo a sua colocação
mas qual o problema dessa divisão se as variáveis são do tipo double
isso significa que em java não posso inserir diretamente numa expressão matemática uma divisão q gera números quebrados mesmo manipulando variáveis double.
nesse caso, qual seria a solução então ?
Troque isso:
(50/100)
Por isso
(50.0/100)
Senão, como o colega falou é uma divisão de inteiros. E o resultado disso vai ser 0.
coloque 50.0/100.0 que funciona, vc está trabalhando com double e 50/100 é inteiro
Desculpe, esqueci que era double.
Tente (50.0/100.0).
Veja bem, as variáveis são do tipo double.
Mas os parênteses serão a primeira coisa a ser avaliada na sua expressão.
Então, primeiro de tudo, ele faz a divisão. Nenhum dos números literais (sem variável) é promovido a double, já que a expressão entre parênteses só envolve termos inteiros. Só depois, ele vai multiplicar pela sua variável double, e calcular com precisão de double.
Por isso trocar por 50.0 ou 100.0 funciona. Assim vc já converte um dos termos entre para double de cara. 
ok amigos
funcionou e de fato aprendi como o java é bastante rigoroso nessa manipulação de dados
grato pela atenção e rapidez nas respostas