Problema com Divisão [RESOLVIDO]

5 respostas
Johnnie_Wlaker

Pessoal bom dia!

TO precisando de uma ajuda aqui, tenho uma aplicação em Swing, e em determinado ponto desta, tenho um frame que possui uma ProgressBar e um jLabel que deve assumir os valores percentuais de acordo com o que o sistema processa.

Tenho o código abaixo, mas quando executo, a cada valor que é dividido, o meu resultado é 0.00

for(Record_Model reg : disparo.record(myArq)) {
		    float valor = (i/counter)*100;  
		    System.out.printf("%.2f.",valor);  
			
			progressBar.setValue((int) valor);
			lblPercent.setText(valor + "%");
		}

No meu exemplo o meu total de registros é 12 e minha variável counter inicia com o valor 1
ou seja, o corre isso (saída do meu printf):

1 / 12 = 0.00
2 / 12 = 0.00
3 / 12 = 0.00
4 / 12 = 0.00
5 / 12 = 0.00
6 / 12 = 0.00
7 / 12 = 0.00
8 / 12 = 0.00
9 / 12 = 0.00
10 / 12 = 0.00
11 / 12 = 0.00
12 / 12 = 1.00

Só atualiza o último valor. Por que isso esta ocorrendo?

Agradeço qualquer “luz” a respeito.

5 Respostas

pmlm

A divisão de inteiros dá um inteiro.

Assim já deve dar o resultado que pretendes:

float valor = (1.0 * i / counter) * 100;
Scratsh

Por que você está usando INT… logo o valor é truncado antes de retornar… então sempre arredonda para zero!

Johnnie_Wlaker

Scratsh e pmlm VALEU A FORÇA!!!

A sugestão de ambos funcionou.

Muito obrigado.

Abração

Johnnie_Wlaker

Johnnie Wlaker:
Pessoal bom dia!

TO precisando de uma ajuda aqui, tenho uma aplicação em Swing, e em determinado ponto desta, tenho um frame que possui uma ProgressBar e um jLabel que deve assumir os valores percentuais de acordo com o que o sistema processa.

Tenho o código abaixo, mas quando executo, a cada valor que é dividido, o meu resultado é 0.00

for(Record_Model reg : disparo.record(myArq)) {
		    float valor = (i/counter)*100;  
		    System.out.printf("%.2f.",valor);  
			
			progressBar.setValue((int) valor);
			lblPercent.setText(valor + "%");
		}

No meu exemplo o meu total de registros é 12 e minha variável counter inicia com o valor 1
ou seja, o corre isso (saída do meu printf):

1 / 12 = 0.00
2 / 12 = 0.00
3 / 12 = 0.00
4 / 12 = 0.00
5 / 12 = 0.00
6 / 12 = 0.00
7 / 12 = 0.00
8 / 12 = 0.00
9 / 12 = 0.00
10 / 12 = 0.00
11 / 12 = 0.00
12 / 12 = 1.00

Só atualiza o último valor. Por que isso esta ocorrendo?

Agradeço qualquer “luz” a respeito.

E

Niklaus Wirth, que era professor antes de mais nada, ao criar a linguagem Pascal pensou que o sinal de “/” para representar tanto a divisão inteira quanto a de ponto-flutuante ia dar confusão (ele deve ter enfrentado esse problema em Fortran, onde há essa confusão).
Portanto, ele criou o operador “div” para a operação inteira, e reservou o “/” para a divisão de ponto flutuante.

Infelizmente, Kernighan e Ritchie, ao criarem a linguagem C, não pensaram nisso, e simplesmente não fizeram essa distinção.

O sr. James Gosling persistiu no erro (ao copiar todos os operadores do C e preservar suas complexas regras de precedência). e até hoje temos esse problema de as pessoas (mesmo sendo muito experientes em Java) se confundirem ao fazer uma divisão.

Criado 26 de setembro de 2012
Ultima resposta 26 de set. de 2012
Respostas 5
Participantes 4