Błędny wynik odejmowania

Hej, może ktoś wytłumaczyć dlaczego wynik działania 3.50 - 2.45 = 1.0499999999999998, gdzie wszystkie znaki na niebie mówią że musi być 1.05 :wink:

ruby 2.3.4p301 (2017-03-30 revision 58214)
Rails 4.2.7.1

Pozdrowionka

tutaj znajdziesz odpowiedź na swoje pytanie: http://0.30000000000000004.com/

2 Likes

Przekonwertuj do BigDecimal jesli wykonujesz jakies dzialania i potem znow do float jesli chcesz zapisac w bazie.

(BigDecimal.new(3.5.to_s) - BigDecimal.new(2.45.to_s)).to_f

lub

(BigDecimal.new(3.5, 3) - BigDecimal.new(2.45, 3)).to_f

W uproszczeniu probllem polega na tym ze dzialania na flaot tak naprawde są wykonywane na reprezentacjach tych liczb w integer. Nie wszystkie liczby typu float mają dokładną reprezentacje w int stąd są zaokrąglane. BigDecimal to klasa która pomaga rozwiązać ten problem.

Studia informatyczne jednak są potrzebne

1 Like

Wystarczyłby kurs, na którym są podstawy informatyki. Po co od razu studia.