Метода Math.Round()
От домашното за while ми хрумна да изследвам метода Math.Round(). Написах следната програмка https://pastebin.com/g75vZhQQ.
Със съкращенията „AWF 0“ и „To even“ съм означил кога съм използвал съответно MidpointRounding.AwayFromZero и MidpointRounding.ToEven.
При вход 1,345 се получава:
Math.Round(n, 2, AWF 0)=1,35
Math.Round(n, 2, To even)=1,34
Math.Round(n, 2)=1,34
Math.Round(n+1, 2)=2,34
Math.Round(n-1, 2)=0,34
Math.Round((n+1-1), 2)=1,34
n:F2=1,35
n+1:F2=2,35
При вход 2,345 се получава:
Math.Round(n, 2, AWF 0)=2,35
Math.Round(n, 2, To even)=2,35
Math.Round(n, 2)=2,35
Math.Round(n+1, 2)=3,34
Math.Round(n-1, 2)=1,35
Math.Round((n+1-1), 2)=2,35
n:F2=2,35
n+1:F2=3,35
При вход 3,345 се получава:
Math.Round(n, 2, AWF 0)=3,35
Math.Round(n, 2, To even)=3,34
Math.Round(n, 2)=3,34
Math.Round(n+1, 2)=4,35
Math.Round(n-1, 2)=2,35
Math.Round((n+1-1), 2)=3,35
n:F2=3,35
n+1:F2=4,35
Резултатите предизвикват за мен следните въпроси:
1.Защо при n =1,345 Math.Round(n, 2)=1,34 , а при n =2,345 Math.Round(n-1, 2)=1,35.
2. Защо при n =1,345 Math.Round(n+1, 2)=2,34 , а при n =2,345 Math.Round(n, 2)=2,35.
3. Защо изобщо при n =2,345 Math.Round(n, 2, MidpointRounding.ToEven)=2,35 а не 2,34.
4. Защо при n =3,345 Math.Round(n, 2)=3,34 и Math.Round((n+1-1), 2)=3,35.
Изчетох разясненията в сайта на Microsoft както за метода така и за енумерацията и все още нямам представа защо метода има това поведение.