Как я могу округлить значения до ближайшего целого числа?
Например:
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();