- A+

Category：Languages

My last goal is always to round to the *nearest even intenger*.

For example, the number `1122.5196`

I want as result `1122`

. I have tried this options:

`Math.Round(1122.5196d, 0, MidpointRounding.ToEven); // result 1123 Math.Round(1122.5196d, 0, MidpointRounding.AwayFromZero); // result 1123 `

At the end, what I would like to get it is always the *nearest even intenger*. For example:

`1122.51 --> 1122`

`1122.9 --> 1122`

(because the nearest int is`1123`

but it is*odd*, and`1122`

is*nearer*than`1124`

)`1123.0 --> 1124`

(the*next even value*, the next*higher*even value)

I only work with *positive numbers*.

And so on.

There are some method that do that or I should to implement my own method?

Thanks.

Try this (let's use `Math.Round`

with `MidpointRounding.AwayFromZero`

in order to obtain "*next* even value" but *scaled* - `2`

factor):

`double source = 1123.0; // 1124.0 double result = Math.Round(source / 2, MidpointRounding.AwayFromZero) * 2; `

Demo:

` double[] tests = new double[] { 1.0, 1123.1, 1123.0, 1122.9, 1122.1, 1122.0, 1121.5, }; string report = string.Join(Environment.NewLine, tests .Select(item => $"{item,6:F1} -> {Math.Round(item / 2, MidpointRounding.AwayFromZero) * 2}")); Console.Write(report); `

Outcome:

` 1 -> 2 // In case of tie, next even value 1123.1 -> 1124 1123.0 -> 1124 // In case of tie, next even value 1122.9 -> 1122 1122.1 -> 1122 1122.0 -> 1122 1121.5 -> 1122 `