Ao exibir o valor de um decimal atualmente com .ToString()
, é preciso gostar de 15 casas decimais e, como estou usando-o para representar dólares e centavos, quero apenas que a saída tenha 2 casas decimais.
Eu uso uma variação .ToString()
para isso?
Decimal
eDouble
typeToString
aceita argumento para formatação. Tente converter seu valor para decimal / duplo primeiro.Sei que essa é uma pergunta antiga, mas fiquei surpreso ao ver que ninguém parecia postar uma resposta;
Isto é o que eu usaria:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
fonte
Isso vai:
23.456
→23.46
23
→23.00
;12.5
→12.50
Ideal para exibição de moeda.
Confira a documentação do ToString ("F") (graças a Jon Schneider).
fonte
.
pode ser substituído por com,
base na cultura. Você deve passar adianteCultureInfo.InvariantCulture
como o segundo argumento para desativar isso.Se você só precisa disso para exibição, use string.Format
http://www.csharp-examples.net/string-format-double/
O "m" é um sufixo decimal. Sobre o sufixo decimal:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
fonte
Dado decimal d = 12,345; as expressões d.ToString ("C") ou String.Format ("{0: C}", d) rendem US $ 12,35 - observe que são usadas as configurações de moeda da cultura atual, incluindo o símbolo.
Observe que "C" usa o número de dígitos da cultura atual. Você sempre pode substituir o padrão para forçar a precisão necessária com o
C{Precision specifier}
gostoString.Format("{0:C2}", 5.123d)
.fonte
Se você quiser que ele seja formatado com vírgulas e um ponto decimal (mas sem símbolo de moeda), como 3.456.789,12 ...
fonte
Já existem duas respostas de alta pontuação que se referem a Decimal.Round (...), mas acho que é necessária uma explicação um pouco mais - porque há uma propriedade importante inesperada de Decimal que não é óbvia.
Um decimal 'sabe' quantas casas decimais se baseou em sua origem.
Por exemplo, o seguinte pode ser inesperado:
Fazer as mesmas operações com
Double
não fornecerá casas decimais ("25"
) para cada uma das opções acima.Quando você deseja um decimal com duas casas decimais, há cerca de 95% de chance, é porque é a moeda; nesse caso, isso provavelmente é bom para 95% das vezes:
Ou no XAML você apenas usa
{Binding Price, StringFormat=c}
Um caso em que encontrei onde eu precisava de um decimal, era como um decimal ao enviar XML para o serviço web da Amazon. O serviço estava reclamando porque um valor decimal (originalmente do SQL Server) estava sendo enviado
25.1200
e rejeitado (25.12
era o formato esperado).Tudo o que eu precisava fazer era
Decimal.Round(...)
com duas casas decimais para corrigir o problema.TypedValue
é do tipoDecimal
que eu não podia fazerToString("N2")
e precisava arredondá-lo e mantê-lo como adecimal
.fonte
Aqui está um pequeno programa do Linqpad para mostrar diferentes formatos:
Aqui estão os resultados:
fonte
Método Math.Round (Decimal, Int32)
fonte
Muito raramente, você deseja uma sequência vazia se o valor for 0.
A resposta mais votada está incorreta e perdeu 10 minutos do tempo (da maioria) das pessoas.
fonte
"#"
significa dígito do número (se necessário) (sem preenchimento se não for necessário)"0"
significa dígito do número (não importa o que) (preenchidos com zeros se não disponível)A resposta de Mike M. foi perfeita para mim no .NET, mas o .NET Core ainda não possui um
decimal.Round
método.No .NET Core, eu tive que usar:
Um método hacky, incluindo a conversão em string, é:
fonte
Nenhuma delas fez exatamente o que eu precisava, forçar 2 pontos de pontos e arredondar
0.005 -> 0.01
Forçar 2 dp exige aumentar a precisão em 2 dp para garantir que tenhamos pelo menos 2 dp
arredondando para garantir que não temos mais de 2 pontos
fonte
A resposta com melhor classificação descreve um método para formatar a representação em seqüência do valor decimal e funciona.
No entanto, se você realmente deseja alterar a precisão salva no valor real, precisa escrever algo como o seguinte:
Um exemplo de teste de unidade:
fonte
Você pode usar system.globalization para formatar um número em qualquer formato necessário.
Por exemplo:
Se você tiver um
decimal d = 1.2300000
e precisar recortá-lo com 2 casas decimais, ele poderá ser impresso assim emd.Tostring("F2",ci);
que F2 está formando uma string com 2 casas decimais e ci é a localidade ou a informação da cultura.para obter mais informações, consulte este link
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
fonte
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Este link explica em detalhes como você pode lidar com seu problema e o que você pode fazer se quiser saber mais. Para fins de simplicidade, o que você quer fazer é
se você quiser isso para uma moeda, facilite digitando "C2" em vez de "F2"
fonte
fonte
Se você precisar manter apenas 2 casas decimais (ou seja, cortar todo o restante dos dígitos decimais):
Se você precisar manter apenas 3 casas decimais:
fonte