Подтвердить что ты не робот

Как округлить до ближайшего целого числа в С#

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

Например:

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

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

4b9b3361

Ответ 1

Подробнее см. официальную документацию . Например:

В основном вы предоставляете метод Math.Round для трех параметров.

  • Значение, которое вы хотите округлить.
  • Количество десятичных знаков, которые вы хотите сохранить после значения.
  • Необязательный параметр, который вы можете использовать для округления 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).

Ответ 2

Math.Ceiling

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

Math.Floor

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

что вы после этого просто

Math.Round

который округляет по этот пост

Ответ 3

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

Ответ 4

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

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

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

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2

Ответ 6

Вы можете использовать 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

Ответ 7

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

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.

Ответ 8

Используйте Math.Round:

double roundedValue = Math.Round(value, 0)

Ответ 9

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

public static double R(double x)
{
    // markup to nearest 5
    return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}

Ответ 10

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

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

Тогда:

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

и т.д...

Ответ 11

var roundedVal = Math.Round(2.5, 0);

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

var roundedVal = 3

Ответ 12

Если ваша работа с целыми числами, а не с номерами с плавающей запятой, вот путь.

#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))

Здесь оба "numr" и "denr" являются целыми без знака.

Ответ 13

Использование раундов Math.Round(number) до ближайшего целого числа.

Ответ 14

Напишите свой собственный круглый метод. Что-то вроде,

function round(x) rx = Math.ceil(x) if (rx - x <= .000001) return int(rx) else return int(x) end

Ответ 15

decimal RoundTotal = Total - (int)Total;
if ((double)RoundTotal <= .50)
   Total = (int)Total;
else
   Total = (int)Total + 1;
lblTotal.Text = Total.ToString();