Basicamente, você dá ao Math.Roundmétodo três parâmetros.
O valor que você deseja arredondar.
O número de decimais que você deseja manter após o valor.
Um parâmetro opcional que você pode invocar para usar o arredondamento AwayFromZero. ( ignorado a menos que o arredondamento seja ambíguo, por exemplo, 1,5 )
Você precisa MidpointRounding.AwayFromZerose 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.5também é arredondado para 2).
é mesmo assim para arredondar 137,5 a 140 e não a 138? Quer dizer, arredondar para o décimo mais próximo?
sam
7
Você precisa Math.Round, não Math.Ceiling. Ceilingsempre "arredonda" para cima, enquanto Roundarredonda para cima ou para baixo, dependendo do valor após o ponto decimal.
Ainda parece suspeito. Em primeiro lugar, a questão pergunta sobre o arredondamento para cima e em segundo lugar, quando eu tentei apenas agora, a implementação padrão de Math.Round (1,5) rodadas para 2. Portanto, este pode não ser o que ele queria.
ver
além disso, seu exemplo mistura vírgula decimal com vírgula decimal. Qual você normalmente usa (na Suécia, eu acho)? :)
ver
oops ... oh sim, desculpe. na programação do ponto decimal, é claro, mas no texto formal usamos a vírgula decimal. e sim, Suécia ^^ sobre a questão e a parte "arredondamento": acho que é apenas um erro de linguagem. nos exemplos dados por op, alguns números decimais são arredondados para baixo.
Davogotland
@ver eu não arredondar para baixo com Math.Round, faço-o com um gesso. é por isso que esse jeito é manual e meio fofo;)
davogotland
5
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).
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
Estou usando este seu método porque também preciso de uma string e .ToString ("n0") cuida do arredondamento para mim: 1,5m.ToString ("n0") // retorna "2"
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:
Demonstração ao vivo
Você precisa
MidpointRounding.AwayFromZero
se quiser que um valor 0,5 seja arredondado para cima. Infelizmente, este não é o comportamento padrão paraMath.Round()
. Se estiver usandoMidpointRounding.ToEven
(o padrão), o valor é arredondado para o número par mais próximo (1.5
é arredondado para2
, mas2.5
também é arredondado para2
).fonte
away from zero
também significa que-1.5
arredondará para-2
.sempre arredonda para cima (em direção ao teto)
sempre arredonda para baixo (em direção ao chão)
o que você busca é simplesmente
que ronda de acordo com esta postagem
fonte
Você precisa
Math.Round
, nãoMath.Ceiling
.Ceiling
sempre "arredonda" para cima, enquantoRound
arredonda para cima ou para baixo, dependendo do valor após o ponto decimal.fonte
tem este manual, e um jeito meio fofo também:
simplesmente adicione 0,5 a qualquer número e lance-o para int (ou base) e ele será arredondado matematicamente de maneira correta: D
fonte
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).
fonte
Apenas um lembrete. Cuidado com o dobro.
fonte
Você tem a função Math.Round que faz exatamente o que você deseja.
fonte
1.5
quanto ao valor? Você precisa de mais parâmetros.isso será arredondado para o próximo 5 ou não mudará se já for divisível por 5
fonte
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:
Então:
etc ...
fonte
Use
Math.Round
:fonte
Isso dará resultado:
fonte
Se você está trabalhando com inteiros em vez de números de ponto flutuante, aqui está o caminho.
Aqui ambos "numr" quanto "denr" são inteiros sem sinal.
fonte
Usando
Math.Round(number)
rodadas para o número inteiro mais próximo.fonte
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
fonte
fonte