С # математический раунд на 0,8 не на .5 - PullRequest
0 голосов
/ 11 марта 2019

Предположим, у меня есть число 87,6 типа double, и я хочу его округлить, поэтому я применил метод округления C #, чтобы получить что-то вроде этого

  double test2 = 87.6;
  Console.WriteLine(Math.Round(test2, 0));

, это сгенерирует 88, чтохорошо.Тем не менее, я хотел вернуться к 87, моя логика была бы на 0,8, а не на 0,5.Так, например, если мой вход 87,8, я хочу получить 88, а если мой 88,7, то я хочу округлить до 87.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Я получил ответ из раздела комментариев, вот логика для этого

double test2 = 87.6;
test2 -= 0.3;
Console.WriteLine(Math.Round(test2, 0));

Эта 0,3 будет иметь значение

0 голосов
/ 11 марта 2019

Я думаю, что это будет работать:

public static class RoundingExtensions {
    public static int RoundWithBreak(this valueToRound, double breakValue = .5) {
       if (breakValue <= 0 || breakValue >= 1) { throw new Exception("Must be between 0 and 1") }
       var difference = breakValue - .5;
       var min = Math.Floor(breakValue);
       var toReturn = Math.Round(breakValue - difference, 0);
       return toReturn < min ? min : toReturn;
    }
}

Потребляется:

var test = 8.7;
var result = test.RoundWithBreak(.8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...