Wydaje się, że jakiś niejasnych błędów zaokrąglania kiedy uruchomić następujący kod:Wynik odlewania double do int jest źle
int roundedTotal = (int)(PriorityJob * 100.0);
Początkowo PriorityJob = 1.4
i roundedTotal
jest niezdefiniowany. Ocena PriorityJob * 100.0
w tym momencie daje 140
. Następnie roundedTotal = 139
.
Najwyraźniej 140.0 jest interpretowane jako 139,99999. Czy jest to niedobór silnika zmiennoprzecinkowego? Nigdy czegoś takiego nie widziałem.
nigdy nie widziałem liczb zmiennoprzecinkowych w przybliżeniu? –
1.4 nie istnieje jako float. W rzeczywistości istnieje nieskończona liczba liczb nawet pomiędzy 1,0 a 2,0, których nie można przedstawić w postaci liczby zmiennoprzecinkowej, a 1,4 to jedna z nich. Zostaje zapisany w przybliżeniu w postaci 1.4, jako 1.3999999999999999 – nos
@LuchianGrigore Wydaje się, że jest to prosta operacja. Dlaczego miałby się tak nie udać? –