Arredonde o dobro em duas casas decimais em C #?

Respostas:

479

Isso funciona:

inputValue = Math.Round(inputValue, 2);
Alex LE
fonte
solução alternativa para trunc float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto
1
Se o valor for 48.0000. Não resultará 48,00. double inputValue = 48.00; inputValue = Math.Round (inputValue, 2); resultará apenas em 48. Algum warkaound?
user1926138
100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)
nandin
fonte
4
Isso é realmente o que deve ser usado. A maioria das operações em bancos, etc, é feita usando esse método (MidpointRounding.AwayFromZero).
MadBoy
41
sugerir que os bancos usam o dobro é assustador, não use valores de aproximação para a moeda.
raggi
6
@raggi Temo alguns (bancos) fazer ... Isso explicaria um monte de coisas
de ignição
4
Sim, acredito que foi isso que o filme 'Office Space' foi feito depois - arredondando frações de centavos que ninguém notaria. É bom ter cuidado com o uso arbitrário de arredondamentos.
atconway
1
E como parte da trama de um dos filmes originais do Superman, há muito tempo.
James Westgate
25

Você deveria usar

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round arredonda um valor de ponto flutuante de precisão dupla para um número especificado de dígitos fracionários.

MidpointRounding

Especifica como os métodos de arredondamento matemático devem processar um número intermediário entre dois números.

Basicamente, a função acima pega seu valor de entrada e o arredonda para 2 (ou o número que você especificar) casas decimais. Com MidpointRounding.AwayFromZeroquando um número está a meio caminho entre dois outros, ele é arredondado para o número mais próximo que está longe de zero. Também há outra opção que você pode usar para arredondar para o número par mais próximo.

Calibrar
fonte
25

Outra maneira fácil é usar o ToString com um parâmetro. Exemplo:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Resultado:

54.97
Diwas
fonte
19

Use Math.Round

value = Math.Round(48.485, 2);
recursivo
fonte
Bata-me a ele (embora eu gostaria de acrescentar um ponto e vírgula em lá, também;))
Reed Copsey
1
No entanto, tenha cuidado com MidpointRounding: "Se o valor do primeiro dígito no valor à direita da posição decimal dos dígitos for 5, o dígito na posição dos dígitos será arredondado para cima se for ímpar ou deixado inalterado se for par"
Matthias
8

você pode tentar um de below.there muitas maneiras para isso.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568
reza.cse08
fonte
Eu usei a quarta opção. Escrita F6 trabalhou para mim melhor do que escrever para baixo 6 zeros ;-)
Maurice Klimek
2

Use uma sequência interpolada, isso gera uma sequência arredondada:

var strlen = 6;
$"{48.485:F2}"

Resultado

"48.49"
bigpony
fonte