Kada uradim najprostije oduzimanje double vrednosti , vraća mi rezultat:
-----------------------------
Vrednosti promenljivih su...
i = 37
j = 42
x = 27.475
y = 7.22
Sabiranje...
i + j = 79
x + y = 34.695
Oduzimanje...
i - j = -5
j - i = 5
x - y = 20.255000000000003
y - x = -20.255000000000003
-----------------------------
Ako postavim da x bude dvocifren, takvih problema nema.
Da li bi mogao neko da mi odgovori zašto se to javlja, i kako da to rešim.
pozdrav i hvala unapred!
Ako sumnjate u kod, evo istog:
public class ArithmeticDemo {
public static void main(String[] args) {
//nekoliko brojeva
int i = 37;
int j = 42;
double x = 27.475;
double y = 7.22;
System.out.println("Vrednosti promenljivih su...");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
System.out.println(" x = " + x);
System.out.println(" y = " + y);
//sabiranje brojeva
System.out.println("Sabiranje...");
System.out.println(" i + j = " + (i + j));
System.out.println(" x + y = " + (x + y));
//oduzimanje brojeva
System.out.println("Oduzimanje...");
System.out.println(" i - j = " + (i - j));
System.out.println(" j - i = " + (j - i));
System.out.println(" x - y = " + (x - y));
System.out.println(" y - x = " + (y - x));
//Mno`enje brojeva
System.out.println("Mnozenje...");
System.out.println(" i * j = " + (i * j));
System.out.println(" x * y = " + (x * y));
//deljenje brojeva
System.out.println("Deljenje...");
System.out.println(" i / j = " + (i / j));
System.out.println(" x / y = " + (x / y));
//Deljenje po modulu
System.out.println("Deljenje po modulu...");
System.out.println(" i % j = " + (i % j));
System.out.println(" x % y = " + (x % y));
//mesanje tipova
System.out.println("Mesanje tipova...");
System.out.println(" j + y = " + (j + y));
System.out.println(" i * x = " + (i * x));
}
}
Hvala na brzom odgovoru.
Generalno sam znao o cemu se radi, ali ne znam zasto VM ne resava taj problem kako treba. Trebalo bi da moze sama da se izbori sa tim, zar ne?
Sada ako ima nekoga da pomogne oko resavanja tog problema. Verovatno postoji neko jednostavnije podesavanje ili nesto drugo, da ja ne razmisljam svakog puta sta je on uradio. Ako ja moram svakog puta da se strecam, da li je on dodao 0000000x u decimalama, ....
mislim da samo predstavljanje binarnog broja u memoriji ne možeš nikako da "popraviš". eventualno možeš da koristiš veću preciznost. što se reprezentacije tiče, koristi neku metodu za formatiranje i biće sve ok.