Java não soma corretamente

7 respostas
R

Java basico somas não funcionam (java sum float or double)

Veja o resultados que tive com somas simples em java

0.0
2.0

short v1=0
int v2=1
long v3=2
double v5=10.1001
double v6=1.9999
float v51=10.1001
float v61=1.9999
Double 1 v1+v2+v3+v5+v6 =15.1 <------- certo
Float 1 v1+v2+v3+v51+v61 =15.099999 <------- errado

short v1=1
int v2=2
long v3=3
double v5=10.1001
double v6=1.9999
float v51=10.1001
float v61=1.9999
Double 2 v1+v2+v3+v5+v6 = 18.099999999999998 <---- errado
Float 2 v1+v2+v3+v51+v61 =18.1 <----- certo

public class teste {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	//short v1=0;
	short  v1=0;
	int    v2=1;
	int c1=v1*v2;
	Integer c1a=new Integer(c1);
	System.out.println(c1a.floatValue());
	long  v3=2;
	//long  v3=2;
	long c2=v1+v2*v3;
	Long c2a=new Long(c2);
	System.out.println(c2a.floatValue());

	//float v4=4.33333f;
	//float c3=v1+v2+v3+v4;
	
	double v5=10.1001d;
	double v6=1.9999d;
	float v51=10.1001f;
	float v61=1.9999f;

	System.out.println("==============");
	System.out.println("short v1="+v1);
	System.out.println("int v2="+v2);
	System.out.println("long v3="+v3);
	System.out.println("double v5="+v5);
	System.out.println("double v6="+v6);
	System.out.println("float v51="+v51);
	System.out.println("float v61="+v61);
	double c4=v1+v2+v3+v5+v6;
	System.out.println("Double 1 v1+v2+v3+v5+v6 ="+c4);
	

	float c41=v1+v2+v3+v51+v61;
	System.out.println("Float 1 v1+v2+v3+v51+v61 ="+c41);
	v1=1;
	v2=2;
	v3=3;
	//float v4=4.33333f;
	//float c3=v1+v2+v3+v4;
	//System.out.println(c3);

	System.out.println("==============");
	System.out.println("short v1="+v1);
	System.out.println("int v2="+v2);
	System.out.println("long v3="+v3);
	System.out.println("double v5="+v5);
	System.out.println("double v6="+v6);
	System.out.println("float v51="+v51);
	System.out.println("float v61="+v61);


	c4=v1+v2+v3+v5+v6;
	System.out.println("Double 2 v1+v2+v3+v5+v6 = "+c4);
	
	c41=v1+v2+v3+v51+v61;
	System.out.println("Float 2 v1+v2+v3+v51+v61 ="+c41);
	
}

}

Cfe documentação:
"The following 19 specific conversions on primitive types are called the widening primitive conversions:

byte to short, int, long, float, or double
short to int, long, float, or double
char to int, long, float, or double
int to long, float, or double
long to float or double
float to double "

7 Respostas

D

primeiro leia e entenda cada tipo de variável e pq cada uma é double e float e depois afirme

frankwco

pra ficar mais claro o seu codigo use a tag [code]

Rafael_Nunes

Java soma certo, você é quem está usando tipos de dados errados.
Se for fazer operações que necessitam de precisão decimal, use BigDecimal ao invés de double

Hebert_Coelho

Responda essa pergunta, qual a diferença entre float e double?

Com isso vc irá conseguir responder a sua questão.

Paulo_Silveira

ola

coloquei aqui uma explicacao detalhada pra isso:
http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/

S

VIAJASTE :shock: :shock: :shock: :shock: :shock:
exageraste no nome do topico eu assustei com o nome do topico

blackfalcon

Bem, somar ele soma certo sim, mas pra double existe mesmo alguns erros quando se executa algumas operações, para isso deve-se utilizar o BigDecimal.

Abraços

Criado 13 de agosto de 2010
Ultima resposta 14 de ago. de 2010
Respostas 7
Participantes 8