Как округлить до ближайшего целого числа в C # - PullRequest
79 голосов
/ 13 января 2012

Как округлить значения до ближайшего целого числа?

Например:

1.1 => 1
1.5 => 2
1.9 => 2

"Math.Ceiling ()" мне не помогает.Есть идеи?

Ответы [ 15 ]

177 голосов
/ 13 января 2012

См. официальную документацию для получения дополнительной информации.Например:

По сути, вы задаете методу Math.Round три параметра.

  1. Значение, которое вы хотите округлить.
  2. Количество десятичных разрядов, которое вы хотите сохранитьпосле значения.
  3. Необязательный параметр, который можно вызвать для использования округления AwayFromZero.( игнорируется, если округление не является двусмысленным, например 1,5 )

Пример кода:

var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3

Live Demo

Вам нужно MidpointRounding.AwayFromZero, если вы хотите округлить значение .5.К сожалению, это не стандартное поведение для Math.Round().При использовании MidpointRounding.ToEven (по умолчанию) значение округляется до ближайшего четного числа (1.5 округляется до 2, но 2.5 также округляется до 2).

58 голосов
/ 13 января 2012
Math.Ceiling

всегда округляется (к потолку)

Math.Floor

всегда округляется (к полу)

то, что вы ищете, это просто

Math.Round

который округляется согласно этой записи

7 голосов
/ 13 января 2012

Вам нужно Math.Round, а не Math.Ceiling. Ceiling всегда «округляет» вверх, а Round округляет вверх или вниз в зависимости от значения после десятичной точки.

6 голосов
/ 13 января 2012

есть это руководство, и довольно мило тоже:

double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;

int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);

просто добавьте 0.5 к любому числу и приведите его к int (или напишите его), и оно будет математически правильно округлено: D

5 голосов
/ 26 мая 2015

Просто напоминание. Остерегайтесь двойных.

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2
4 голосов
/ 13 января 2012

Вы можете использовать Math.Round, как предлагали другие (рекомендуется), или вы можете добавить 0,5 и привести к int (что приведет к падению десятичной части).

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
3 голосов
/ 13 января 2012

У вас есть функция Math.Round, которая делает именно то, что вы хотите.

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
2 голосов
/ 22 апреля 2013

округляется до ближайших 5 или не изменяется, если уже делится на 5

public static double R(double x)
{
    // markup to nearest 5
    return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}
1 голос
/ 28 апреля 2017
var roundedVal = Math.Round(2.5, 0);

Это даст результат:

var roundedVal = 3
1 голос
/ 27 декабря 2013

Я искал это, но мой пример состоял в том, чтобы взять число, такое как 4.2769, и поместить его в промежуток как 4,3. Не совсем то же самое, но если это поможет:

Model.Statistics.AverageReview   <= it's just a double from the model

Тогда:

@Model.Statistics.AverageReview.ToString("n1")   <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2")   <=gives me 4.28

и т.д ...

...