@VVVV - provavelmente você está passando uma string em vez de um número . Se você tem uma string, primeiro precisa converter para flutuar ou dobrar. Tentestring.Format("{0:n0}", Double.Parse(yourValue));
Essa solução não é boa do ponto de vista da internacionalização - outras culturas usam caracteres diferentes do ,separador de milhares, por exemplo, um espaço ou até mesmo ..
Justin
6
Funciona graças a + 1. Estenderam, então mostra até 2 dp number.ToString ("#, ## 0. ##"))
Crab Bucket
8
@MacSigler Na verdade, não é verdade, veja o comentário de Roger Lipscombe na resposta acima: String.Format aplicará a localização automaticamente.
Dan Bechard
10
@ MacSigler Essa é a questão, porém, esse código nem sempre imprime uma vírgula. Somente quando a cultura espera vírgulas (por exemplo, en-US ou invariante). Se a cultura é aquela que espera outro separador (por exemplo .), o .NET substituirá automaticamente a vírgula por esse separador. Mais uma vez, peço que você leia o link postado por Roger, se ainda não entende o motivo.
precisa
4
@MacSigler O comentário de Justin ainda está correto, pois se você não forçar explicitamente a cultura a entrar nos EUA, herdará as configurações de cultura da máquina local. Meu entendimento é que compilar o código acima e executá-lo em duas máquinas com culturas diferentes (com separadores de números diferentes) produziriam resultados diferentes. Se você deseja que ela sempre produza uma vírgula, é necessário definir explicitamente uma cultura que use a vírgula (por exemplo, invariável).
O método ": n" é melhor, pois deve respeitar a localidade do usuário.
Torlack 19/09/08
12
Isso é verdade, mas não é garantido que você tenha vírgulas no ponto mil, porque respeita a localidade do usuário.
Stephen Wrighton 19/09/08
2
de volta para você: isso é verdade, mas não é garantido que respeite a localidade do usuário porque ela usa vírgulas como separador de milhares. (Por exemplo, em Portugal, a vírgula é, em vez disso, o separador decimal.)
ANeves
1
Se você deseja aplicar valores após o. você precisa substituir o # por 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : Zero substitui o zero pelo dígito correspondente, se houver um; caso contrário, zero aparecerá na sequência de resultados, enquanto o símbolo "#" será substituído pelo dígito correspondente, se houver um; caso contrário, nenhum dígito aparecerá na sequência de resultados.
Clarice Bouwer
esse método funcionou bem para o meu requisito, a página msdn sobre o método Int32.ToString que seria o local principal em que seria usado msdn.microsoft.com/en-us/library/8wch342y.aspx não é muito útil para esse problema. aplicação quer
stackuser83
33
A resposta mais votada foi ótima e é útil há cerca de 7 anos. Com a introdução do C # 6.0 e, especificamente, a Interpolação de cadeias, existe uma maneira mais limpa e, mais segura da IMO, de fazer o que foi solicitado to add commas in thousands place for a number:
var i =5222000;var s = $"{i:n} is the number";// results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal";// results to > 5,222,000 has no decimal
Onde a variável i é colocada no lugar do espaço reservado (ou seja {0}). Portanto, não há necessidade de lembrar qual objeto vai para qual posição. A formatação (ou seja :n) não mudou. Para um recurso completo das novidades, você pode acessar esta página .
Se você deseja forçar um separador "," independentemente da cultura (por exemplo, em uma mensagem de rastreamento ou log), o código a seguir funcionará e terá o benefício adicional de informar ao próximo cara que o encontra exatamente o que está fazendo.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
Observe que o valor que você está formatando deve ser numérico. Não parece que será necessária uma representação em seqüência de um número e o formato é com vírgulas.
Você pode usar uma função como esta para formatar números e, opcionalmente, passar nas casas decimais desejadas. Se as casas decimais não forem especificadas, serão usadas duas casas decimais.
Eu uso decimal, mas você pode alterar o tipo para qualquer outro ou usar um objeto anônimo. Você também pode adicionar uma verificação de erro para valores negativos de casas decimais.
O método que eu costumava não me preocupar mais com culturas e possíveis problemas de formatação é que eu o formatei como moeda e depois retirei o símbolo da moeda.
Esse código não é independente da cultura - ele usará qualquer cultura padrão definida na máquina que está executando o código. Isso pode criar uma saída indesejada onde a cultura coloca seus símbolos de moeda no final do número, em vez do início (por exemplo fr-FR), ou usa mais de um caractere para denotar a moeda (por exemplo da-DK), ou não separa milhares usando vírgulas (por exemplo, a maioria da Europa continental).
ou, de uma maneira mais robusta, convém obter o código de idioma de um local específico e use como abaixo:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
NOSLocalidade SAÍDA: US $ 9.999.999,00
Saída local alemã
Locale locale =newLocale("de","DE");
SAÍDA: 9.999.999,00 €
Saída local indiana
Locale locale =newLocale("de","DE");
SAÍDA: R $ 999.999,00
Saída local da Estônia
Locale locale =newLocale("et","EE");
SAÍDA: 9 999 999 €
Como você pode ver em diferentes saídas, não precisa se preocupar com o separador como vírgula ou ponto ou mesmo espaço. Você pode obter o número formatado de acordo com os padrões i18n
bem detectado corretamente, ele pode ser usado para obter a instância da moeda como: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); corrigiu o código, obrigado!
Anirudh
3
Você verificou as tags? A questão é sobre c # não Java!
Salar
-3
Se você deseja mostrá-lo no DataGridview, você deve alterar seu tipo, porque o padrão é String e, como você o altera para decimal, considera como Número com ponto flutuante
Dim dt AsDataTable=NewDataTable
dt.Columns.Add("col1",GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)DataGridView1.DataSource= dt
String.Format("{0:#,##0}", 1234);
também funciona sem casas decimais.string.Format("{0:n0}", Double.Parse(yourValue));
Eu achei que essa era a maneira mais simples:
fonte
fonte
,
separador de milhares, por exemplo, um espaço ou até mesmo.
..
), o .NET substituirá automaticamente a vírgula por esse separador. Mais uma vez, peço que você leia o link postado por Roger, se ainda não entende o motivo.Se você deseja uma cultura específica, tente:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19.950.000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Nota: Algumas culturas
,
costumam significar decimal, em vez de.
ter cuidado.fonte
Formatos padrão, com suas saídas relacionadas,
Exemplo de saída (cultura en-us):
fonte
Este é o melhor formato. Funciona em todos os casos:
fonte
Isso lhe dará vírgulas nos pontos relevantes.
fonte
A resposta mais votada foi ótima e é útil há cerca de 7 anos. Com a introdução do C # 6.0 e, especificamente, a Interpolação de cadeias, existe uma maneira mais limpa e, mais segura da IMO, de fazer o que foi solicitado
to add commas in thousands place for a number
:Onde a variável
i
é colocada no lugar do espaço reservado (ou seja{0}
). Portanto, não há necessidade de lembrar qual objeto vai para qual posição. A formatação (ou seja:n
) não mudou. Para um recurso completo das novidades, você pode acessar esta página .fonte
Simples assim:
mais informações estão aqui
fonte
Se você deseja forçar um separador "," independentemente da cultura (por exemplo, em uma mensagem de rastreamento ou log), o código a seguir funcionará e terá o benefício adicional de informar ao próximo cara que o encontra exatamente o que está fazendo.
conjuntos formatados para "19.400.320"
fonte
O exemplo a seguir exibe vários valores formatados usando seqüências de caracteres personalizadas que incluem zero espaços reservados.
Ou
resultado "29.255,0"
Ou
resultado "29.255,00"
fonte
fonte
Mais simples, usando interpolação de string em vez de String.Format
ou usando yourVariable
fonte
Por exemplo
String.Format("{0:0,0}", 1);
retorna 01, para mim não é válidoIsso funciona para mim
produção 19.950.000
fonte
Observe que o valor que você está formatando deve ser numérico. Não parece que será necessária uma representação em seqüência de um número e o formato é com vírgulas.
fonte
fonte
O C # 7.1 (talvez mais cedo?) Torna isso o mais fácil e bonito possível, com interpolação de string:
fonte
Você pode usar uma função como esta para formatar números e, opcionalmente, passar nas casas decimais desejadas. Se as casas decimais não forem especificadas, serão usadas duas casas decimais.
Eu uso decimal, mas você pode alterar o tipo para qualquer outro ou usar um objeto anônimo. Você também pode adicionar uma verificação de erro para valores negativos de casas decimais.
fonte
O método que eu costumava não me preocupar mais com culturas e possíveis problemas de formatação é que eu o formatei como moeda e depois retirei o símbolo da moeda.
if (decimal.TryParse(tblCell, out result))
fonte
fr-FR
), ou usa mais de um caractere para denotar a moeda (por exemploda-DK
), ou não separa milhares usando vírgulas (por exemplo, a maioria da Europa continental).Abaixo está uma boa solução em Java!
ou, de uma maneira mais robusta, convém obter o código de idioma de um local específico e use como abaixo:
NOSLocalidade SAÍDA: US $ 9.999.999,00
Saída local alemã
SAÍDA: 9.999.999,00 €
Saída local indiana
SAÍDA: R $ 999.999,00
Saída local da Estônia
SAÍDA: 9 999 999 €
Como você pode ver em diferentes saídas, não precisa se preocupar com o separador como vírgula ou ponto ou mesmo espaço. Você pode obter o número formatado de acordo com os padrões i18n
fonte
locale
??Se você deseja mostrá-lo no DataGridview, você deve alterar seu tipo, porque o padrão é String e, como você o altera para decimal, considera como Número com ponto flutuante
fonte