2013-06-29 17 views
8

Mam pytanie do wszystkich.int a = (int) ((0,7 + 0,1) * 10). Dlaczego a = 7?

int a = (int) ((0.7 + 0.1) * 10) 

Po wykonaniu tego kodu, a = 7. Nie mogę zrozumieć dlaczego, ponieważ (0,7 + 0,1) = 0,8 i 0,8 x 10 = 8. Czy ktoś może mi powiedzieć, dlaczego? Dzięki!

+7

Spróbuj wydrukować wynik "0,7 + 0,1", a otrzymasz odpowiedź. – Vulcan

+0

Wynik to 0. Nie rozumiem jednak, dlaczego a = 7 –

+0

@ user2535193 Jak to drukujesz? Opublikuj kod odpowiedzialny za drukowanie. – Maroun

Odpowiedz

24

Kwestia jest taka, że ​​ani 0.1 ani 0.7 mogą być reprezentowane dokładnie jak double:

  • 0.1 dostaje reprezentowane około 0.10000000000000000555.

  • 0.7 zostaje przedstawiony jako około 0.69999999999999995559.

Ich suma wynosi około 0.79999999999999993339. Pomnożone przez dziesięć i obcięte, daje to 7.

What Every Computer Scientist Should Know About Floating-Point Arithmetic to doskonała lektura na ten temat.

5

Jest to arytmetyzm pływający, jest podświetlany.

Co tu się dzieje jest to, że (0,1 + 0,7) jest naprawdę blisko 0,8 ale to nie faktycznie 0,8, jeśli pomnożyć przez 10 otrzymasz 7,9999 ..., kiedy podłoga, że ​​masz 7

3

Dziesiętna część liczby int w języku Java jest obcięta. Możesz albo utworzyć zmienne zmiennoprzecinkowe x i y, albo po prostu rzucić je, aby je uaktywnić i odrzucić, aby uzyskać int jako wynik końcowy.

Powiązane problemy