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 "