Is there a way to do 'correct' arithmetical rounding in .NET? / C#

Math.Round() is behaving correctly.

The idea with midpoint rounding is that half of the in-between numbers should round up and half should round down. So for numbers between 0.1 and 0.2, half of them should round to 0.1 and half should round to 0.2. The midpoint between these two numbers is 0.15, so that's the threshold for rounding up. 0.146 is less than 0.15, therefore it must round down to 0.1.

                    Midpoint
0.10                  0.15                  0.20
 |----------------|----|---------------------|
                0.146
       <---- Rounds Down

I don't get what you are trying to accomplish here. 0.149 rounded to one decimal place is 0.1, not 0.2


Rounding is not an iterative process, you round only once.

So 0.146 rounded to 1 decimal digit is 0.1.

You don't do this:

0.146 --> 0.15
0.15 -->  0.2

You only do this:

0.146 --> 0.1

Otherwise, the following:

0.14444444444444446

would also round to 0.2, but it doesn't, and shouldn't.