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