Używam następujący kod do zaokrąglania do 2DP:Zaokrąglanie podwaja - 0,5 - sprintf
sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
powodzeniem uzupełnia 6,666 do 6,67, ale to nie działa prawidłowo podczas omijania 5.555. Zwraca 5,55, podczas gdy powinno (przynajmniej moim zdaniem) zwrócić 5.56.
Jak mogę je zaokrąglić, gdy następna cyfra to 5? tj. powrót 5.56.
edytuj: Teraz zdaję sobie sprawę, że tak się dzieje, ponieważ po wpisaniu 5.555 przez cin otrzymuje się zapisany jako 5.554999997.
Mam zamiar spróbować zaokrąglić w dwóch etapach - najpierw do 3dp, a następnie do 2dp. jakiekolwiek inne (bardziej eleganckie) pomysły?
To wydaje się nieco bardziej niezawodny niż idei dodanie 0,0005, ale oba będą pracować tak myślę. Dzięki za pomoc! – Meir
Wygląda na to, że to błąd. 5.5551 zostanie poprawnie zaokrąglone! – ypnos
To nie jest buggy, @ypnos, po prostu nie pogubiłeś się jeszcze w granicach zmiennoprzecinkowych. 5.5551 jest reprezentowany jako 5.555100000000000370 ... który zaokrągli w górę, 5.555 zostanie odrzucony jako 5.5549999999 ... który zaokrągli w dół. Możesz zobaczyć, że jest to problem reprezentacji, próbując kodu z 5.5500000000000000001 - oba wyjścia są nieprawidłowe w tym przypadku 5.55, ponieważ numer NIE JEST 5.55000 ... 1, gdy jest przechowywany. To 5.549999 ... – paxdiablo