using System;
using static System.Console;
using static System.Math;
public class Program {
public static void Main() {
WriteLine("Decimal");
for (var valor = -1M; valor <= 1M; valor += 0.05M) WriteLine("{0:N1} => {1:N1}", valor, valor.RoundMidPoint());
WriteLine("Double");
for (var valor = -1.0; valor <= 1.0; valor += 0.05) WriteLine("{0:N1} => {1:N1}", valor, valor.RoundMidPoint());
}
}
public static class RoundUtil {
public static Decimal RoundMidPoint(this Decimal value) => Sign(value) * Ceiling(Abs(value) * 2) / 2;
public static double RoundMidPoint(this double value) => Sign(value) * Ceiling(Abs(value) * 2) / 2;
}
//http://pt.stackoverflow.com/q/16185/101
dXNpbmcgU3lzdGVtOwp1c2luZyBzdGF0aWMgU3lzdGVtLkNvbnNvbGU7CnVzaW5nIHN0YXRpYyBTeXN0ZW0uTWF0aDsKCnB1YmxpYyBjbGFzcyBQcm9ncmFtIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgewogICAgICAgIFdyaXRlTGluZSgiRGVjaW1hbCIpOwogICAgICAgIGZvciAodmFyIHZhbG9yID0gLTFNOyB2YWxvciA8PSAxTTsgdmFsb3IgKz0gMC4wNU0pIFdyaXRlTGluZSgiezA6TjF9ID0+IHsxOk4xfSIsIHZhbG9yLCB2YWxvci5Sb3VuZE1pZFBvaW50KCkpOwogICAgICAgIFdyaXRlTGluZSgiRG91YmxlIik7CiAgICAgICAgZm9yICh2YXIgdmFsb3IgPSAtMS4wOyB2YWxvciA8PSAxLjA7IHZhbG9yICs9IDAuMDUpIFdyaXRlTGluZSgiezA6TjF9ID0+IHsxOk4xfSIsIHZhbG9yLCB2YWxvci5Sb3VuZE1pZFBvaW50KCkpOwogICAgfQp9CgpwdWJsaWMgc3RhdGljIGNsYXNzIFJvdW5kVXRpbCB7CiAgICBwdWJsaWMgc3RhdGljIERlY2ltYWwgUm91bmRNaWRQb2ludCh0aGlzIERlY2ltYWwgdmFsdWUpID0+IFNpZ24odmFsdWUpICogQ2VpbGluZyhBYnModmFsdWUpICogMikgLyAyOwoKICAgIHB1YmxpYyBzdGF0aWMgZG91YmxlIFJvdW5kTWlkUG9pbnQodGhpcyBkb3VibGUgdmFsdWUpID0+IFNpZ24odmFsdWUpICogQ2VpbGluZyhBYnModmFsdWUpICogMikgLyAyOwp9CgovL2h0dHA6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzE2MTg1LzEwMQ==