Witam jestem początkującym w javie i natrafiłem na taki problem mianowicie gdy dziele np dwie liczby typu float 4/2 to otrzymuje wynik 2.000000001
W C nigdy takich problemow nie było.
I teraz pytanie dlaczego tak się dzieje i jak to zmienić?
W C też byli takie problemy, z tym że printf umiejętnie im zaradzał. Zmień typ danych na double. Lub zmień metodę wyświetlania.
Z double juz probowalem i nic nie pomogło. Nie rozumiem za bardzo o co Ci chodzi z metodą wyświetlania? możesz podpowiedzieć?
import java.io.*;
public class test
{
public static void main(String[] args) throws Exception
{
double a=4,b=2,x;
x=a/b;
System.out.printf("%f\n",x);
if(x==2) System.out.printf("dokladnie 2");
}
}
Wynik:2,0000
code>Wynik:`2,000000
dokladnie 2
Więc podaj w jaki sposób stwierdzasz że wyszło ci nie równiutko 2?
Zacznij od przeczytania tego: http://osilek.mimuw.edu.pl/index.php?title=WDP_Reprezentacja_liczb
Może ma starego Pentiuma :P
http://en.wikipedia.org/wiki/Pentium_FDIV_bug
Coś ściemniasz:
import java.io.*;
public class test
{
public static double dziel(double a, double b)
{
return a/b;
}
public static void main(String[] args) throws Exception
{
double a=4,b=2;
System.out.println(dziel(a,b));
if(dziel(a,b)==2) System.out.printf("dokladnie 2");
}
}
Wynik:
2.0
dokladnie 2
Wczoraj juz bylem trochę zmeczony i sie nie dopatrzylem ze w moim programie wartortość b jest zwracana z innej metody. Nie chce wrzucać mojego kodu ponieważ robię program na zaliczenie.
Poniżej umieszczam spreparowany kod który zwraca wynik 0.33000000000000007 a nie 0,33:
public static int ble(double k){
int y;
y=(int)k;
return y;
}
public static double klap(double k){
return k - ble(k);
}
public static void main(String[] args) {
System.out.println(klap(2.33));
}
}
To jest zupełnie normalne i wynika z tego, że rozwinięcie dwójkowe liczby 2.33 jest nieskończone, zatem komputer używa przybliżonej wartości.
Przeczytałeś już to, co podlinkowałem? Wszyscy czekamy, aż to zrobisz i przestaniesz się dziwić normalnym zjawiskom.