Como posso arredondar os valores para o número inteiro mais próximo?
Por exemplo:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" não está me ajudando. Alguma ideia?
Como posso arredondar os valores para o número inteiro mais próximo?
Por exemplo:
1.1 => 1
1.5 => 2
1.9 => 2
"Math.Ceiling ()" não está me ajudando. Alguma ideia?
Respostas:
Veja a documentação oficial para mais. Por exemplo:
Basicamente, você dá ao Math.Round
método três parâmetros.
Código de amostra:
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
Você precisa MidpointRounding.AwayFromZero
se quiser que um valor 0,5 seja arredondado para cima. Infelizmente, este não é o comportamento padrão para Math.Round()
. Se estiver usando MidpointRounding.ToEven
(o padrão), o valor é arredondado para o número par mais próximo ( 1.5
é arredondado para 2
, mas 2.5
também é arredondado para 2
).
away from zero
também significa que -1.5
arredondará para -2
.
Math.Ceiling
sempre arredonda para cima (em direção ao teto)
Math.Floor
sempre arredonda para baixo (em direção ao chão)
o que você busca é simplesmente
Math.Round
que ronda de acordo com esta postagem
Você precisa Math.Round
, não Math.Ceiling
. Ceiling
sempre "arredonda" para cima, enquanto Round
arredonda para cima ou para baixo, dependendo do valor após o ponto decimal.
tem este manual, e um jeito meio fofo também:
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);
simplesmente adicione 0,5 a qualquer número e lance-o para int (ou base) e ele será arredondado matematicamente de maneira correta: D
Você pode usar Math.Round como outros sugeriram (recomendado), ou você pode adicionar 0,5 e converter para um int (o que eliminará a parte decimal).
double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1
double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2
Você tem a função Math.Round que faz exatamente o que você deseja.
Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.
1.5
quanto ao valor? Você precisa de mais parâmetros.
Eu estava procurando por isso, mas meu exemplo foi pegar um número, como 4,2769 e soltá-lo em um intervalo de apenas 4,3. Não é exatamente o mesmo, mas se isso ajudar:
Model.Statistics.AverageReview <= it's just a double from the model
Então:
@Model.Statistics.AverageReview.ToString("n1") <=gives me 4.3
@Model.Statistics.AverageReview.ToString("n2") <=gives me 4.28
etc ...
Use Math.Round
:
double roundedValue = Math.Round(value, 0)
var roundedVal = Math.Round(2.5, 0);
Isso dará resultado:
var roundedVal = 3
Se você está trabalhando com inteiros em vez de números de ponto flutuante, aqui está o caminho.
#define ROUNDED_FRACTION(numr,denr) ((numr/denr)+(((numr%denr)<(denr/2))?0:1))
Aqui ambos "numr" quanto "denr" são inteiros sem sinal.
Usando Math.Round(number)
rodadas para o número inteiro mais próximo.
Escreva seu próprio método de rodada. Algo como,
function round(x)
rx = Math.ceil(x)
if (rx - x <= .000001)
return int(rx)
else
return int(x)
end