Как округлить до половины значения - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь округлить, как следует.

1.1 -> 1
1.2 -> 1
.
1.4 -> 1
1.5 -> 1.5
1.6 -> 1.5
.
.
1.9 -> 1.5
2 -> 2

Как мне этого добиться? Я пытался Math.Round (значение) , Math.Round (значение, 1) , Math.Round (значение, MidpointRounding.AwayFromZero) Ничего не достигается Что мне нужно. Любая помощь высоко ценится

1 Ответ

2 голосов
/ 22 февраля 2020

Можно попробовать:

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
...