Existe um formatador de exibição que produzirá decimais como essas representações de string em c # sem fazer nenhum arredondamento?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} irá arredondar e usar alguma função do tipo Trim não funcionará com uma coluna numérica ligada em uma grade.
c#
formatting
decimal
JC.
fonte
fonte
"0.0#"
.Acabei de aprender como usar corretamente o
G
especificador de formato. Consulte a documentação do MSDN . Há uma nota um pouco abaixo que afirma que os zeros finais serão preservados para tipos decimais quando nenhuma precisão for especificada. Por que eles fariam isso, eu não sei, mas especificar o número máximo de dígitos para nossa precisão deve resolver o problema. Portanto, para formatar decimais,G29
é a melhor aposta.fonte
Este formato de string deve tornar o seu dia: "0. ##################################". Lembre-se de que os decimais podem ter no máximo 29 dígitos significativos.
Exemplos:
fonte
Esta é mais uma variação do que vi acima. No meu caso, preciso preservar todos os dígitos significativos à direita da vírgula decimal, o que significa eliminar todos os zeros após o dígito mais significativo. Achei que seria bom compartilhar. Eu não posso garantir a eficiência disso, mas quando você tenta atingir a estética, você já está condenado às ineficiências.
Isso é tudo, só queria jogar meus dois centavos.
fonte
strValue.TrimEnd('0').TrimEnd('.')
vez doEndsWith
cheque?Outra solução, baseada na resposta do dislexicanaboko , mas independente da cultura atual:
fonte
Método de extensão:
Código de exemplo:
Resultado:
fonte
IndexOf
para encontrar caracteres dentro de uma string. É muito fácil ajustar o exemplo para resolver o problema sem decimais.Não acho que seja possível out-of-the-box, mas um método simples como este deve servir
fonte
É muito fácil de fazer fora da caixa:
isso removerá todos os zeros finais de seu decimal.
A única coisa que você precisa fazer é adicionar
.ToString().TrimEnd('0','.');
a uma variável decimal para converter aDecimal
em aString
sem zeros à direita, como no exemplo acima.Em algumas regiões, deve ser um
.ToString().TrimEnd('0',',');
(onde eles usam uma vírgula em vez de um ponto, mas você também pode adicionar um ponto e uma vírgula como parâmetros para ter certeza).(você também pode adicionar ambos como parâmetros)
fonte
params
argumento, não é necessário construir uma matriz explicitamente. Portanto, em vez de verboso,TrimEnd("0".ToCharArray())
você pode apenas escreverTrimEnd('0')
(nota: passou como único emchar
vez de achar[]
).char
, não umstring
(então: aspas simples, não aspas duplas). Eu consertei para você - espero que você não se importe.fonte
Acabei com o seguinte código:
fonte
Acabei com esta variante:
Vantagens:
você pode especificar o número máximo de dígitos significativos após o ponto a ser exibido no tempo de execução;
você pode especificar explicitamente um método round;
você pode controlar explicitamente uma cultura.
fonte
Você pode criar um método de extensão
fonte
Eu fiz os métodos de extensão abaixo para mim mesmo para caber em um dos meus projetos, mas talvez eles sejam benéficos para outra pessoa.
Embora exija uma referência a
System.Numerics
.fonte