Boa tarde,
Estou tentando fazer a continha abaixo no meu JSP:
( (qntTotal - atraso) / qntTotal ) * 100;
<%
int qntTotal = procFin.get(procFin.size()-1).getQntTotal();
int atrasoSup = procFin.get(procFin.size()-1).getAtrasoSuprimentos();
out.println("Quantidade Total: " + qntTotal);
out.println("Quantidade Total: " + atrasoSup);
Double prazo = (double) ( ( (qntTotal - atrasoSup) / qntTotal ) * 100 );
out.println("Meta Prazo: "+ prazo );
%>
O resultado sai assim:
Quantidade Total: 110 Quantidade Total: 36 Meta Prazo: 0.0
Porem se vocês fizerem as contas dá o resultado de 67,27 e nao 0.0.
O que esta acontecendo? Já tentei colocar os tipos Int, Long, Big Decimal, Double mas nada resolve, sempre dá o 0.0.
Tentei ‘diminuir a conta’ para saber onde esta o problema, descobri que a subtraçao ele faz certinho, o problema esta quando ele divide. O que é isso?
Boa tarde.
Se você trocar o tipo int por double, funcionara.
int qntTotal = procFin.get(procFin.size()-1).getQntTotal();
int atrasoSup = procFin.get(procFin.size()-1).getAtrasoSuprimentos();
double qntTotal = procFin.get(procFin.size()-1).getQntTotal();
double atrasoSup = procFin.get(procFin.size()-1).getAtrasoSuprimentos();
[quote=diego.sas]Boa tarde.
Se você trocar o tipo int por double, funcionara.
[code]
int qntTotal = procFin.get(procFin.size()-1).getQntTotal();
int atrasoSup = procFin.get(procFin.size()-1).getAtrasoSuprimentos();
double qntTotal = procFin.get(procFin.size()-1).getQntTotal();
double atrasoSup = procFin.get(procFin.size()-1).getAtrasoSuprimentos();
[/code][/quote]
Que coisinha simples!!! Obrigada! Funcionou!!!
Cara eu testei assim e deu certo, más não sei dizer ao certo pq o seu codigo nao funcionou.
public class Teste {
public static void main(String dfdf[]) {
int qntTotal = 110;
int atrasoSup = 36;
out.println("Quantidade Total: " + qntTotal);
out.println("Quantidade Total: " + atrasoSup);
double aux = (double) ((qntTotal - atrasoSup));
Double prazo = aux / qntTotal * 100;
out.println("Meta Prazo: " + prazo);
}
}
[b]saida =Meta Prazo: 67.27272727272727[/b]
Boa tarde Ellensmp
Oque ocorre é o seguinte: vc faz: (( qntTotal - atrasoSup ) / qntTotal ) * 100 )
Quando ele faz: ( ( qntTotal - atrasoSup ) / qntTotal = ( 110 - 36 ) / 110.
O compilador trata essa expressão toda como um inteiro. Oque dá 0, pois inteiro não tem casa decimal. Então 0 * 100 = 0. Vc só está fazendo o cast para double depois que já encontrou o valor de 0.
vlw
Diogo acho que não tem como ele tratar tudo como inteiro pois há uma divisão. Tenho uma teoria:
Aqui estamos lidando com inteiros:
(qntTotal - atrasoSup) = 74
Aqui já estamos lidando com ponto flutuante:
(qntTotal - atrasoSup) / qntTotal )=0,67
Aqui o valor acima (0,67) é convertido para integer - resultando em 0 - e multiplicado por 100
(0 * 100) = 0
Nisso é feito o casting (de int para double) + autoboxing (double para Double) transformando o 0 em 0.0.
Alguém aceita esta teoria?
Melhor explicado emmanuelrock. ehehhe
estou aprendendo, mas a sua tá certa mesmo.
vlw
Valeu, e eu também estou aprendendo ![:slight_smile: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)