adi Napisano Wrzesień 22, 2016 Zgłoś Napisano Wrzesień 22, 2016 (edytowany) Cześć, jestem początkujący i nie wiem dlaczego kod: public class Stale{ public static void main(String[] args){ final double LICZBA_PI=3.14; final double STALA2=3.00; double wynik=LICZBA_PI+STALA2; System.out.println(wynik); } } daje wynik 6.140000000000001? Jeżeli zmienię wartość STALA2 na 3.01 to wynik jest poprawny. Edytowano Listopad 29, 2016 przez Bartosz Wójcik Cytuj
andrus19 Napisano Wrzesień 24, 2016 Zgłoś Napisano Wrzesień 24, 2016 Jest to związane z wewnątrzą reprezentacją liczb zmienno-przecinkowych. Możesz sobie przeczytać tu https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems z czego wynika ten problem. Jeśli chcesz uzyskać precyzyjny wynik użyj klasy BigDecimal. Masz tu kawałek kodu, z którego szybko załapiesz o co chodzi: public static void main(String[] args) { final double stala = 3.00; final double stala1 = 3.14; System.out.println("double: " + stala); System.out.println("double1: " + stala1); System.out.println("double sum: " + (stala1 + stala)); BigDecimal bigDecimalPi = BigDecimal.valueOf(3.14); BigDecimal doublePi = new BigDecimal(3.14); System.out.println(bigDecimalPi.setScale(100)); System.out.println(doublePi.setScale(100)); System.out.println(bigDecimalPi.setScale(100)); System.out.println(BigDecimal.valueOf(stala).setScale(100)); System.out.println(bigDecimalPi.add(BigDecimal.valueOf(stala)).setScale(100)); } Zwróć uwagę na tworzenie bigDecimalPi oraz doublePi. 1 Cytuj
adi Napisano Wrzesień 26, 2016 Autor Zgłoś Napisano Wrzesień 26, 2016 coś mi nie poszło: Decimal.java:10: error: cannot find symbol BigDecimal bigDecimalPi = BigDecimal.valueOf(3.14); ^ symbol: class BigDecimal location: class Decimal Decimal.java:10: error: cannot find symbol BigDecimal bigDecimalPi = BigDecimal.valueOf(3.14); ^ symbol: variable BigDecimal location: class Decimal Decimal.java:11: error: cannot find symbol BigDecimal doublePi = new BigDecimal(3.14); ^ symbol: class BigDecimal location: class Decimal Decimal.java:11: error: cannot find symbol BigDecimal doublePi = new BigDecimal(3.14); ^ symbol: class BigDecimal location: class Decimal Decimal.java:15: error: cannot find symbol System.out.println(BigDecimal.valueOf(stala).setScale(100)); ^ symbol: variable BigDecimal location: class Decimal Decimal.java:16: error: cannot find symbol System.out.println(bigDecimalPi.add(BigDecimal.valueOf(stala)).setScale(100)); ^ symbol: variable BigDecimal location: class Decimal 6 errors Cytuj
andrus19 Napisano Wrzesień 26, 2016 Zgłoś Napisano Wrzesień 26, 2016 musisz dodać import klasy na górze pliku import java.math.BigDecimal; 1 Cytuj
adi Napisano Wrzesień 26, 2016 Autor Zgłoś Napisano Wrzesień 26, 2016 Serdeczne dzięki Teraz wszystko ładnie działa import java.math.BigDecimal; public class Decimal{ public static void main(String[] args) { BigDecimal stala = BigDecimal.valueOf(3.00); BigDecimal stala1 = BigDecimal.valueOf(3.14); System.out.println(stala.setScale(100)); System.out.println(stala1.setScale(100)); BigDecimal wynik = stala.add(stala1); System.out.println(wynik.setScale(100)); } } Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.