Dúvida ridícula

6 respostas
A

Boa noite pessoal, gostaria de saber por que minha conta (1/2)*10 está mostrando 0 no System.out.println, se faço 0.5 * 10 ele mostra 5.0 , não tem nada no código , é so isso, mas só mostra 0. Obrigado

6 Respostas

lina

Oi,

Lina na madrugada!

Você já leu a documentação do Sysout referente ao código abaixo:

System.out.println((1/2));

Prints an integer and then terminate the line. This method behaves as though it invokes print(int) and then println().

Ou seja, na matemática um INT é um INT. Ou melhor, números reais sem vírgulas. Se o print utiliza-se uma função como double ficaria tudo mais fácil.

Tchauzin!

A

Como posso mostrar um double em algum lugar então?Pois vi que o método print(double) existe, porém continua mostrando um int, até mesmo mostrando a conta em um TextField sai inteiro, o que posso fazer?

edu_fernandes

Se for o caso de você ter de usar forma fracionária, sugiro o seguinte método.

double divisor = 2;
double dividendo = 1;
		
System.out.println(dividendo/divisor);

Isso exibiria 0.5 no console.

Se você colocar diretamente, como citado acima, ele tratará com inteiro, o que faz um certo sentido.
Espero ter ajudado.
Abraço e boa sorte.

edu_fernandes

Apenas para constar.
Não trate sua dúvida como ridícula. Ridículo é não ter dúvidas.
Afinal ninguém sabe tudo.

lina

Oi,

Algo como ter variareis do tipo double.
double
x = 1.0,
y = 2.0,
div = (x/y)*10;	
		
System.out.println(div);

Álcool me atrapalha

Tchauzin!

A

Entendi, só mais uma coisa, estou escrevendo um programa onde temos o cliente e servidor, o servidor recebe um arquivo enviado pelo cliente, está tudo funcionando perfeitamente, exceto a atualização da barra de progresso, onde é atualizada pelo seguinte código

private Thread thread = new Thread( new Runnable() {
	    	 public void run(){
	    		 double doubles = 0;
	    		 int i = 0;
	 		while(sendFile.getSizeSent()<=sendFile.getFileSize()){	//enquanto o total de bytes enviados não somar o tamanho total do arquivo ele continua.
	 			
	 			doubles = ((sendFile.getSizeSent()/sendFile.getFileSize())*100); // realiza a conta da onde tiraria a porcentagem atual
	            i = (int)doubles;
	            sendFile.updateProgressBarSending(i); // chama outra classe que chama o controle da tela, passando a porcentagem , que por fim é atualizada na tela.	
	 			try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
	 			} 		
	 		 sendFile.updateProgressBarSending(0); // ao final de tudo seta a barra para 0 novamente
	    	 }});

Esse código já funcionou um dia atrás , mas como dei uma parada para descansar posso ter mudado algo que o fez parar de funcionar e agora sempre leva como 0 esse cálculo, alguma idéia do que fazer para mandar o cálculo correto?

PS: o fileSize é o total do arquivo enviado em bytes(file.length) e o fileSent é atualizado a cada vez que um pacote de 100000bytes é escrito no outputbuffer.

Obrigado.

PS2: Enquanto enviava essa mensagem percebi que o *100 estava fora do parênteses o que estava causando o erro, mudei para

doubles = (((sendFile.getSizeSent()/sendFile.getFileSize())*100));

e agora funcionou perfeitamente.
Enfim, Obrigado pela ajuda.

Criado 19 de novembro de 2010
Ultima resposta 19 de nov. de 2010
Respostas 6
Participantes 3