Wymagania: Często stosowane do zaokrąglania i nie są bardzo wrażliwe na wymagania precyzyjne.
Aby uzyskać zaokrąglenie o dwa miejsca po przecinku, programista napisał następujący kod,
Kod jest bardzo prosty, deweloperzyRzeczywisty wynik wynosił 12,12, co było sprzeczne z oczekiwanym wynikiem zaokrąglenia 12,13。
Powodem tego wyniku jest fakt, że Math.Round domyślnie nie używa reguły zaokrąglenia, lecz zaokrągleń do parzystego.
Zaokrąglić do pięciu, aby utworzyć parę
Tak zwane zaokrąglenie z sześciu do pięciu, aby utworzyć parę, oznacza, że po wyznaczeniu cyfr znaczących, jeśli następna cyfra znacząca jest mniejsza lub równa 4, zaokrągla się ją w dół; jeśli jest większa lub równa 6, zaokrągla się w górę o jeden. Gdy następna cyfra znacząca to 5,
- Jeśli liczba przed 5 jest nieparzysta, zaokrągli do pięciu i przesunęli się o jeden
- Jeśli 5 jest przed liczbą parzystą, pomiń 5 (0 jest parzyste).
Statystycznie zaokrąglenie do parzystego jest dokładniejsze niż zaokrąglenie pięć, ponieważ przy wielu obliczeniach zaokrąglenie co pięć do jednego może prowadzić do większej liczby.
Na przykład:
1,15+1,25+1,35+1,45 = 5,2
Jeśli cyfry znaczące są o jedno miejsce po przecinku, wynik uzyskuje się za pomocą zasady zaokrąglenia
1,2 + 1,3 + 1,4 + 1,5 = 5,4
Wynik uzyskany przez zaokrąglenie do pięciu parzystych jest
1,2 + 1,2 + 1,4 + 1,4 = 5,2
Pokazuje to, że reguła zaokrąglenia daje dokładniejsze wyniki.
Math.Round
Jak więc użyć Math.Round, aby osiągnąć oczekiwane zaokrąglenie?
W rzeczywistości Math.Round w C# oferuje wiele metod przeciążenia, w tym dwie metody:
Obie metody dostarczają trzeciego parametru zwanego mode, który jest zmienną enumeracyjną MidpointRounding z dwoma wybieralnymi wartościami
- AwayFromZero – zaokrąglanie w górę
- ToEven – zaokrąglenie na parzyste
Jeśli chcemy idealnego, zaokrąglonego wyniku, możemy użyć następującego kodu:
Enumeracja punktu środkowego, jak pokazano poniżej:
Odniesienie:Logowanie do linku jest widoczne. |