Dor de Cabeça! Por que sempre o Dividendo?

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);

Veja só:
http://www.guj.com.br/posts/list/84121.java#448928