Calculo de porcentagem dentro do loop

Estou imprimir a porcentagem de um numero em java , mas sempre quando realizo a divisão de um numero menor pelo numero maior sempre o resultado é igual a zero;
exemplo:
int size = 399; for(int i=0; i < size; i++){ int porcentagem =( i /size) * 100; System.out.println(porcentagem); }
Já tentei com float e com double e nada. Pensei que o calculo estava errado então como uso linux , tentei no python:
for i in range(size): porcentagem = (i /size) * 100 print(porcentagem)
e funcionou . Testei em php 7.0 :
for ($i =0; $i < $size; $i++) { $porcentagem = ($i / $size) * 100; echo $porcentagem . "\n"; } e funcionou .
Testei no nodejs
` size = 399;
399

for (i =0; i < size; i++){
porcentagem = (i/size) * 100;
console.log(porcentagem);
}
`
e funcionou. Porque no java este simples calculo sempre da zero ? alguem sabe explicar o motivo? e qual seria a forma correta em java? Caso eu esteja errado!

Olá

int porcentagem =( i /size) * 100;

Em java, a divisão de inteiros retorna um numero inteiro

  • i é inteiro
  • size é inteiro
    então
  • i/size é inteiro

Para i = 1 e size = 399, o resultado da divisão será 0, mas para i = 400, o resultado será 1.

Para resolver isso é necessário converter um deles para float ou double pois uma variavel flutuante operado com um inteiro retornará um valor flutuante

// usando cast no i
float porcentagem =( ((float)i) /size) * 100;

// usando cast no size
float porcentagem =( i /((float)size)) * 100;

Observe q se converter o 100 para double ou float, não vai adiantar pois será calculado primeiro a divisão.

// convertendo 100 para float, f após o numero
float porcentagem = (i * 100f) / size;
1 curtida

Valeu ! [RESOLVIDO]