Eu tenho um campo de preço para exibir que às vezes pode ser 100 ou 100,99 ou 100,9. O que eu quero é exibir o preço em 2 casas decimais somente se as casas decimais forem inseridas para esse preço, por exemplo, se for 100, deve ser apenas mostre 100 e não 100,00 e se o preço for 100,2, ele deve exibir 100,20 da mesma forma para 100,22 deve ser o mesmo. Pesquisei no Google e encontrei alguns exemplos, mas eles não correspondiam exatamente ao que eu queria:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
Respostas:
Uma maneira deselegante seria:
Com
DoFormat
sendo algo como:Não é elegante, mas trabalha para mim em situações semelhantes em alguns projetos.
fonte
CurrentCulture
, o separador decimal pode não ser.
. A menos queCultureInfo.InvariantCulture
seja usado comstring.Format
, você teria que verificar o valor deCultureInfo.NumberFormat.NumberDecimalSeparator
, e isso seria uma verdadeira PITA. :)60000
int e quiser que seja60.000
?Desculpe por reativar esta pergunta, mas não encontrei a resposta certa aqui.
Na formatação de números, você pode usar
0
como local obrigatório e#
opcional.Assim:
Você também pode combinar
0
com#
.Para este método de formatação é sempre usado
CurrentCulture
. Para algumas culturas.
, será alterado para,
.Resposta à pergunta original:
A solução mais simples vem do @Andrew ( aqui ). Então, eu pessoalmente usaria algo assim:
fonte
Este é um caso de uso de número flutuante de formatação comum.
Infelizmente, todas as seqüências de caracteres de formato de uma letra incorporadas (por exemplo, F, G, N) não conseguem isso diretamente.
Por exemplo,
num.ToString("F2")
sempre mostrará 2 casas decimais como123.40
.Você terá que usar o
0.##
padrão, mesmo que pareça um pouco detalhado.Um exemplo de código completo:
fonte
Pergunta antiga, mas eu queria adicionar a opção mais simples na minha opinião.
Sem milhares de separadores:
Com milhares de separadores:
O mesmo, mas com String.Format :
Se você precisar em muitos lugares , eu usaria essa lógica em um método de extensão :
fonte
experimentar
fonte
Não sei de maneira alguma colocar uma condição no especificador de formato, mas você pode escrever seu próprio formatador:
fonte
Aqui está uma alternativa ao método de Uwe Keim, que ainda manteria a mesma chamada de método:
Com
MyCustomFormat
sendo algo como:fonte
CurrentCulture
, o separador decimal pode não ser.
. A menos queCultureInfo.InvariantCulture
seja usado comstring.Format
, você teria que verificar o valor deCultureInfo.NumberFormat.NumberDecimalSeparator
, que é bastante deselegante.Código de uma linha simples:
fonte
Se o seu programa precisar ser executado rapidamente, chame value.ToString (formatString) para obter um desempenho de formatação de string ~ 35% mais rápido em relação a $ "{value: formatString}" e string.Format (formatString, value).
Dados
Código
Saída de código
Referências
Sequências de formato numérico personalizadas [docs.microsoft.com]
Exemplo de gráfico de barras Qt Charts [doc.qt.io]
fonte
Receio que não exista um formato interno que faça isso. Você precisará usar um formato diferente, dependendo se o valor é um número inteiro ou não. Ou sempre formate com duas casas decimais e manipule a sequência posteriormente para remover qualquer ".00" à direita.
fonte
Se nenhuma das outras respostas funcionar para você, talvez seja porque você está vinculando o
ContentProperty
controle de umaOnLoad
função, o que significa que isso não funcionará:A solução é simples: existe uma
ContentStringFormat
propriedade no xaml. Então, quando você criar o rótulo, faça o seguinte:Ou
fonte
algo assim também funcionará:
fonte
Experimentar:
fonte
Para tornar o código mais claro que o Kahia escreveu (é claro, mas fica complicado quando você deseja adicionar mais texto) ... tente esta solução simples.
Eu tive que adicionar o elenco extra (decimal) para ter Math.Round comparar as duas variáveis decimais.
fonte
Isso funcionou para mim!
fonte
Ao lidar com decimais provenientes de um banco de dados SQL (T-), você deseja converter decimais anuláveis e não anuláveis com x casas decimais e pode revisar facilmente o código em relação às definições de sua tabela - e, é claro, exibir o número certo de casas decimais para o usuário.
Infelizmente, o Entity Framework não converte automaticamente algo como um SQL
decimal(18,2)
em um equivalente do .NET com o mesmo número de casas decimais (já que existe apenas decimal com precisão total disponível). Você precisa truncar as casas decimais manualmente.Então, eu fiz assim:
Exemplo de uso:
fonte