Dziwne i bez sensu to jest. Zamiast trzech ogólnie przyjętych sposobów zaokrągleń (wg cyfry <=4 lub >=5, zawsze w dół, zawsze w górę), są wymyślone różne sposoby zaokrągleń, z których domyślny nie odpowiada ogólnie przyjętej zasadzie 4/5, co zauważył OP i jest w linku na SO.
Nigdy nie mów nigdy / zawsze. To "nasze" zaokrąglanie wydaje się europocentryczne.
A z ciekawostek, polscy pracownicy z otoczenia ekonomii dawniej byli uczeni jeszcze innych zaokrągleń, piątka szła w dół lub w górę co drugi raz. W tamtych latach (zaokrąglanie ręczne/kalkulatorem wyrazistych długich kolumn) nawet to miało sens - nie do utrzymania gdy za zaokrąglanie odpowiedzialne jest funkcyjka gdzieś na dole.
Możliwe, że problem pojawia się w przypadku, gdy liczba w systemie dziesiętnym wynosi w przybliżeniu na przykład 1,35
, a faktycznie wynosi 1,34999999
, co wynika z zaokrągleń w reprezentacji zmiennoprzecinkowej. Chcąc zaokrąglić z dokładnością do 0,1
jest dylemat, w którą stronę zaokrąglić. W dół, bo na pozycji setnych stoi cyfra 4
, czy w górę, bo ta liczba powinna być traktowana jako 1,35
i taki zapis wypuści ToString()
? Jeżeli w reprezentacji binarnej jest faktycznie 1,350000001
, to sprawa jest oczywista.
Gdyby zaokrąglanie realizować poprzez pomnożenie przez 10, 100, 1000, zaokrąglenie do całości, a potem podzielenie przez tą liczbę, to może dojdzie do błędu z tego powodu, że pomnożenie i podzielenie liczby zmiennoprzecinkowej przez 10 też może nieznacznie zafałszować wartość?
Nigdzie i nie spotkałem się z zaokrąglaniem na zasadzie, że w przypadku cyfry od 0 do 5 to w dół, a w przypadku cyfry od 6 do 9 to w górę. Może w jakiś bardzo specjalistycznych obszarach tak się robi, ale ogólnie jest przyjęte, że jak jest 5, to w górę. Dopiero teraz się dowiaduję, ze może być jeszcze inaczej.