Arredonde o dobro em duas casas decimais em C #?


258

Quero arredondar o valor duplo em duas casas decimais em c # como posso fazer isso?

double inputValue = 48.485;

depois de arredondar

inputValue = 48.49;

Relacionado: c # - Como arredondar um valor decimal para 2 casas decimais (para saída em uma página)


Tome nota que você não pode representar todos os valores de ponto flutuante usando dupla e isso pode te enganar quando arredondamento
Liam

Respostas:


479

Isso funciona:

inputValue = Math.Round(inputValue, 2);

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)

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.


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

19

Use Math.Round

value = Math.Round(48.485, 2);

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

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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.