Можно попробовать:
decimal HalfRound(decimal value)
{
var floor = Math.Floor(value);
return floor += (value - floor) < 0.5M ? 0.0M : 0.5M;
}
Позволяет проверить вышеуказанную функцию для некоторых данных ОП:
Console.WriteLine($"1.1 => {HalfRound(1.1M)}");
Console.WriteLine($"1.2 => {HalfRound(1.2M)}");
Console.WriteLine($"1.4 => {HalfRound(1.4M)}");
Console.WriteLine($"1.5 => {HalfRound(1.5M)}");
Console.WriteLine($"1.6 => {HalfRound(1.6M)}");
Console.WriteLine($"1.9 => {HalfRound(1.9M)}");
Console.WriteLine($"2.0 => {HalfRound(2.0M)}");
Console.WriteLine($"3.5 => {HalfRound(3.5M)}");
Console.WriteLine($"3.6 => {HalfRound(3.6M)}");
Console.WriteLine($"3.9 => {HalfRound(3.9M)}");
Результат:
//1.1 => 1.0
//1.2 => 1.0
//1.4 => 1.0
//1.5 => 1.5
//1.6 => 1.5
//1.9 => 1.5
//2.0 => 2.0
//3.5 => 3.5
//3.6 => 3.5
//3.9 => 3.5