Как округлить значения до ближайшего целого числа?
Например:
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если вы хотите округлить значение 0,5. К сожалению, это не поведение по умолчанию для Math.Round(). При использовании MidpointRounding.ToEven(по умолчанию) значение округляется до ближайшего четного числа ( 1.5округляется до 2, но 2.5также округляется до 2).
away from zeroтакже означает -1.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,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.
1.5как насчет стоимости? Вам нужно больше параметров.
Я искал это, но мой пример заключался в том, чтобы взять число, такое как 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
и т.д...
Использование Math.Round:
double roundedValue = Math.Round(value, 0)
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