Boa noite pessoal…
Sou novo com Java, e hj estava testando alguns calculos de rotina ( adição, subtração, divisão), e justamente o ultimo que
ta me dando dor de cabeça. A duvida é o seguinte: Toda vez que tento retornar o resto da divisão em um calculo onde o
Divisor é maior que o Dividendo sempre o resultado é o proprio Dividendo. Ex.: 4 % 40 = 4;
Me ajudem!
Retorna 4 porque a resposta é essa mesmo.
Se dividir 4 por 40 dá 0 e sobra 4, pois 0*40+4=4
4 % 40 indica que você quer o resto da divisão de 4 por 40.
[quote=Roger75]Retorna 4 porque a resposta é essa mesmo.
Se dividir 4 por 40 dá 0 e sobra 4, pois 0*40+4=4
4 % 40 indica que você quer o resto da divisão de 4 por 40.[/quote]
Boa Noite Roger…
Cara ainda ñ entendi sua logica. Pois se 4 / 40 = 0,1 como quociente e 0 como resto;
Como pode dar 4 de resto?
[quote=winderfaik][quote=Roger75]Retorna 4 porque a resposta é essa mesmo.
Se dividir 4 por 40 dá 0 e sobra 4, pois 0*40+4=4
4 % 40 indica que você quer o resto da divisão de 4 por 40.[/quote]
Boa Noite Roger…
Cara ainda ñ entendi sua logica. Pois se 4 / 40 = 0,1 como quociente e 0 como resto;
Como pode dar 4 de resto?
[/quote]
Essa operação (%, ou mod) é feita com números inteiros. O resultado tem que ser inteiro, bem como o resto da divisão…
Uma outra forma de pensar…
Pegue a parte fracionária e multiplique pelo denominador…
Ex:
4 / 40 = 0,1
logo o resto é
0,1 * 40 = 4.
Se fosse 48 / 40 = 1,2, certo?
pegue a parte fracionário (que é o resto) e multiplique pelo denominador:
0,2 * 40 = 8
Bom na teoria é legal, mas se tentar trabalhar com número de ponto flutuante em Java, você deverá compreender melhor o conceito de mantissa e o padrão IEEE 754.
Especificação do Java: http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html
fw
É bom entender o padrão para não se surpreender com programas como esse aqui:
float x = 7.9f;
float y = 3;
float z = 1700000;
float result1 = (x/y) * z;
float result2 = (x*z) / y;
System.out.println("Resultado 1: " + result1);
System.out.println("Resultado 2: " + result2);
[quote=ViniGodoy]É bom entender o padrão para não se surpreender com programas como esse aqui:
[code]
float x = 7.9f;
float y = 3;
float z = 1700000;
float result1 = (x/y) * z;
float result2 = (x*z) / y;
System.out.println("Resultado 1: " + result1);
System.out.println("Resultado 2: " + result2);
[/code][/quote]
E qual seria o padrao?? Em um deles a dizima para primeiro que no outro? multiplicacao x divisao?? Ou isso ta mais pra matematica?
float x = 7.9f;
float y = 3;
float z = 1700000;
float result1 = (x / y) * z;
float result2 = (x * z) / y;
System.out.println("Resultado 1: " + result1);
System.out.println("Resultado 2: " + result2);
BigDecimal xB = new BigDecimal(7.9f);
BigDecimal yB = new BigDecimal(3);
BigDecimal zB = new BigDecimal(1700000);
BigDecimal result1B = xB.divide(yB, 200, RoundingMode.DOWN).multiply(zB);
BigDecimal result2B = xB.multiply(zB).divide(yB, 200, RoundingMode.DOWN);
System.out.println("Resultado 1 Big: " + result1B);
System.out.println("Resultado 2 Big: " + result2B);