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