Erro no double

Oi,

Estou com problemas para imprimir um numero double, por exemplo eu crio uma variavel do tipo double, e este recebe o um divisao 1/3, teria que mostra 0.3…e ele esta imprimindo 0.0. Criei um exemplo para vcs testarem ai…o que eu tenho que fazer para imprimir 0.3???
public class Teste{

public static void main(String [] a){

double variavel=1/3;
System.out.println(variavel);

}

}
obrigado pela atencao
Marcelo Enout

Eu fiz assim:

public class Teste{
	public static void main(String[] a)
	{
		double x=1;
		double y=3;
		System.out.println(x/y);
	}
}

e imprimiu 0.3333333333333333

Por que eu não sei :oops:

Olha pessoal, tenham cuidado com os tipos primitivos float e double.

Quem não leu, precisa ler o JDC Tech Tips de 4 de fevereiro de 2003 (Some Things You Should Know About Floating-Point Arithmetic – Algumas coisas que você deve saber sobre aritimética de ponto flutuante).

Coisas desconcertantes!
Abraços.

o problema ai é o seguinte:
aqui

double variavel=1/3; System.out.println(variavel);
ele ta fazendo o seguinte

int tmp=1/3; //por que 1 e 3 são inteiros double variavel=(double)tmp;

e aqui

double x=1; double y=3; System.out.println(x/y); ele esta fazendo realmente uma divisão de ponto flutuante, a diferença basica é que no primeiro ele divide os inteiros e transforma o resultado em double :slight_smile:

o seguinte codigo também funcionaria :slight_smile:

public class Teste{

public static void main(String [] a){

double variavel=1/3.0;
System.out.println(variavel);

}
} 

por que neste caso, um dos operadores é double/float ai ele vai primeiro promover o integer para double e depois realizar a operação :slight_smile:

isto é uma das coisas que sinto falta do delphi :slight_smile:

quer fazer operações de ponto flutuante?? utilize “/”, quer fazer operações de inteiros?? utilize “div” :slight_smile:
mais simples do que a abordagem do java :slight_smile:

se bem que depois que se comessa a entender este esquema de promoções numericas fica mais facil :slight_smile:

double variavel=1/3;

na divisao de inteiros a casas deimais são arredondadas.

vc pode usar tambem

double variavel=1.0/3.0;

Que funciona.