Problema com Divisão [RESOLVIDO]

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.

A divisão de inteiros dá um inteiro.

Assim já deve dar o resultado que pretendes:

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

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

Scratsh e pmlm VALEU A FORÇA!!!

A sugestão de ambos funcionou.

Muito obrigado.

Abração

[quote=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.
[/quote]

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.