Eu quero fazer isso usando a Math.Round
função
c#
decimal
rounding
bankers-rounding
Rex M
fonte
fonte
0.005
ao número antes de arredondar. Da mesma forma, para arredondar para baixo , subtraia0.005
antes de passar para aMath.Round
função.MidPointRounding.ToEven
(também conhecido como "Bankers Rounding") é porque todos nós aprendemos a arredondar na escola, onde 0,5 arredondamentos causam arredondamentos demais. Este é um problema ao lidar com dinheiro, cálculos de impostos etc.Tente o seguinte:
fonte
Pessoalmente, nunca arredondo nada. Mantenha-o o mais resoluto possível, pois o arredondamento é um arenque vermelho no CS de qualquer maneira. Mas você deseja formatar dados para seus usuários e, para esse fim, acho que
string.Format("{0:0.00}", number)
é uma boa abordagem.fonte
Se você gostaria de uma string
Ou um decimal
Mas lembre-se! O arredondamento não é distributivo, ou seja.
round(x*y) != round(x) * round(y)
. Portanto, não faça nenhum arredondamento até o final de um cálculo, caso contrário você perderá a precisão.fonte
A Wikipedia tem uma boa página sobre arredondamentos em geral.
Todos os idiomas .NET (gerenciados) podem usar qualquer um dos mecanismos de arredondamento do CLR (Common Language Run Time). Por exemplo, o método Math.Round () (como mencionado acima) permite que o desenvolvedor especifique o tipo de arredondamento (Arredondar para o par ou Afastar do zero). O método Convert.ToInt32 () e suas variações usam o arredondamento para o par . Os métodos Ceiling () e Floor () estão relacionados.
Você também pode arredondar com formatação numérica personalizada .
Observe que Decimal.Round () usa um método diferente de Math.Round ();
Aqui está uma posição útil no algoritmo de arredondamento do banqueiro. Veja um dos posts engraçados de Raymond aqui sobre arredondamentos ...
fonte
// converte até duas casas decimais
=========
também pode combinar "0" com "#".
fonte
Eu sei que é uma pergunta antiga, mas observe as seguintes diferenças entre a rodada de matemática e a rodada de formato de string :
fonte
Isso é para arredondar para duas casas decimais em C #:
No VB.NET:
fonte
Se você deseja arredondar um número, pode obter resultados diferentes dependendo de: como você usa a função Math.Round () (se for um arredondamento para cima ou para baixo), você está trabalhando com números duplos e / ou flutuantes e você aplica o arredondamento do ponto médio. Especialmente, ao usar com operações dentro dele ou a variável a arredondar vem de uma operação. Digamos que você queira multiplicar esses dois números: 0,75 * 0,95 = 0,7125 . Direita? Não em c #
Vamos ver o que acontece se você quiser arredondar para a terceira casa decimal:
Como você vê, a primeira rodada () está correta se você deseja arredondar o ponto médio. Mas a segunda rodada () está errada se você deseja arredondar.
Isso se aplica a números negativos:
Portanto, IMHO, você deve criar sua própria função de quebra automática para Math.Round () que atenda aos seus requisitos. Eu criei uma função na qual o parâmetro 'roundUp = true' significa arredondar para o próximo número maior. Ou seja: 0,7125 arredonda para 0,713 e -0,7125 arredonda para -0,712 (porque -0,712> -0,713). Esta é a função que eu criei e funciona para qualquer número de decimais:
A variável 'corrector' é para corrigir a imprecisão de operar com números flutuantes ou duplos.
fonte
Uma coisa que você pode querer verificar é o Mecanismo de Arredondamento da Matemática.
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Fora isso, recomendo a abordagem Math.Round (inputNumer, numberOfPlaces) sobre a * 100/100 porque é mais limpa.
fonte
Você deve poder especificar o número de dígitos que deseja arredondar usando Math.Round (YourNumber, 2)
Você pode ler mais aqui .
fonte
Math.Floor (123456.646 * 100) / 100 Retornaria 123456.64
fonte
sequência a = "10.65678";
decimal d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
fonte
Teve uma situação estranha em que eu tinha uma variável decimal, ao serializar 55.50, ele sempre define o valor padrão matematicamente como 55.5. Porém, por algum motivo, nosso sistema cliente espera seriamente 55,50 e eles definitivamente esperam decimais. Foi quando eu escrevi o auxiliar abaixo, que sempre converte qualquer valor decimal preenchido em 2 dígitos com zeros em vez de enviar uma string.
O uso deve ser
Resultado:
fonte
fonte