[ ngj @ 29.08.2006. 10:52 ] @
Pozdrav svima,

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));
}
}

[ kaizen @ 29.08.2006. 11:03 ] @
http://docs.python.org/tut/node16.html

ili ako želiš malo temeljnije:

http://docs.sun.com/source/806-3568/ncg_goldberg.html
[ ngj @ 29.08.2006. 11:23 ] @
Ave !

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, ....

Poz i hvala unapred svima!
[ lukeguy @ 29.08.2006. 21:01 ] @
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.
[ bgd2500 @ 01.09.2006. 11:12 ] @
Koristi BigDecimal
[ kaizen @ 01.09.2006. 11:32 ] @
Citat:
bgd2500: Koristi BigDecimal


Samo obavezno koristi String konstruktor!
http://java.sun.com/j2se/1.5.0...Decimal.html#BigDecimal(double)

[ ngj @ 01.09.2006. 12:39 ] @
Ave !

Jos jednom da se zahvalim na ukazanoj pomoci. Cenim to !

Pozdrav i svako dobro!