Witam,
Robie prosty kalkulator w gui Java, pobieram liczby z JtextField i dodaje je do siebie, w momencie dodania liczb zmienno przecinkowych np 3,4 i 4,3 wyniki jest 7,700003 jak temu zaradzić zeby dodawanie było prawidłowe
Jest prawidłowe. Należy się douczyc na temat niedokładności zmiennoprzecinkowej reprezentacji liczb. Istnieją liczby które binarnie są okresowe po prostu. To tak jakbyś sie dziwił że 1/3+1/3+1/3 to jest 0.99999(9) i burzył że jak z tego uzyskać "prawidłową" liczbę czyli 1. 1/3 nie ma dokładnej dziesiętnej reprezentacji i jest 0.(3) i nic na to nie poradzisz.
Mam rozumieć, że nie da się temu zaradzić ?
Możesz formatować wyjście, tzn. wyświetlać tylko parę miejsc po przecinku.
Z ciekawości, jak wykonujesz pobieranie liczb z pola tekstowego? Użyłem kilku sposobów i każdy dał wynik 3,4 + 4,3 = 7.699999999999999
.
Wiem o co chodzi z niedokładnością, dostałem takie zadanie na laboratorium aby rozwiązać ten problem, prowadzący zaproponował nam rozbicie tej liczby i dodanie np 3,4 + 4,3 w sposób następujący (4+3)+(0,3+0,4) lub sprowadzić je na ułamki proste.
Zmienić typ na BigDecimal?
wtedy wyświetla 7.700000286102294921875
- Obliczenia robisz na BigDecimal.
- Wyświetlasz jako String.
Jeżeli zależy Ci na dokładności, to nie używaj typów zmiennoprzecinkowych.
Wychodzi Ci 7.699999999999999 ponieważ używasz typu double
A jakiego Ty używasz? Z BigDecimal to zmyślasz http://ideone.com/aUoIkR
float, nie zmyślam bo mi na tym nie zależy. Ja mam taki kod dla BD
BigDecimal liczbaBD1 = new BigDecimal(num1);
BigDecimal liczbaBD2 = new BigDecimal(num2);
BigDecimal sumaBD = liczbaBD1.add(liczbaBD2);
Jakiego typu są num1
i num2
? To powinny być Stringi.
Dzięki ;) Pomogło