Как я могу округлить значения до ближайшего целого числа?
Например:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling()" не помогает мне. Есть идеи?
Как я могу округлить значения до ближайшего целого числа?
Например:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling()" не помогает мне. Есть идеи?
Подробнее см. официальную документацию . Например:
В основном вы предоставляете метод Math.Round
для трех параметров.
Пример кода:
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
Вам нужно MidpointRounding.AwayFromZero
, если вы хотите округлить значение .5. К сожалению, это не поведение по умолчанию для Math.Round()
. При использовании MidpointRounding.ToEven
(по умолчанию) значение округляется до ближайшего четного числа (1.5
округляется до 2
, но 2.5
также округляется до 2
).
Math.Ceiling
всегда округляется (к потолку)
Math.Floor
всегда округляется (к полу)
что вы после этого просто
Math.Round
который округляет по этот пост
Вам нужно Math.Round
, а не Math.Ceiling
. Ceiling
всегда "округляется" вверх, а Round
округляется вверх или вниз в зависимости от значения после десятичной точки.
там это руководство, а также довольно мило:
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
Просто напоминание. Остерегайтесь двойной.
Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2
Вы можете использовать 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
У вас есть функция Math.Round, которая делает именно то, что вы хотите.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
Используйте Math.Round
:
double roundedValue = Math.Round(value, 0)
это округляется до ближайшего 5 или не изменяется, если оно уже делится на 5
public static double R(double x)
{
// markup to nearest 5
return (((int)(x / 5)) * 5) + ((x % 5) > 0 ? 5 : 0);
}
Я искал это, но мой пример состоял в том, чтобы взять число, например 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
и т.д...
var roundedVal = Math.Round(2.5, 0);
Это даст результат:
var roundedVal = 3
Если ваша работа с целыми числами, а не с номерами с плавающей запятой, вот путь.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Здесь оба "numr" и "denr" являются целыми без знака.
Использование раундов Math.Round(number)
до ближайшего целого числа.
Напишите свой собственный круглый метод. Что-то вроде,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end
decimal RoundTotal = Total - (int)Total;
if ((double)RoundTotal <= .50)
Total = (int)Total;
else
Total = (int)Total + 1;
lblTotal.Text = Total.ToString();