@VVVV: entonces probablemente esté pasando una cadena en lugar de un número . Si tiene una cadena, primero debe convertir a flotante o doble. Pruebastring.Format("{0:n0}", Double.Parse(yourValue));
Esta solución no es buena desde el punto de vista de la internacionalización: otras culturas usan caracteres que no son ,como un separador de miles, por ejemplo, un espacio o incluso ..
Justin
66
Funciona gracias + 1. Se ha extendido para que se muestre un número de hasta 2 dp. ToString ("#, ## 0. ##")
Crab Bucket
8
@MacSigler En realidad no es cierto, vea el comentario de Roger Lipscombe en la respuesta anterior: String.Format aplicará la localización automáticamente.
Dan Bechard
10
@ MacSigler Sin embargo, ese es el problema, este código no siempre imprime una coma. Solo cuando la cultura es una que espera comas (p. Ej., En EE. UU. O invariante). Si la cultura es una que espera otro separador (p .. Ej. ), .NET reemplazará automáticamente la coma con ese separador. Una vez más, le insto a que lea el enlace publicado por Roger si aún no entiende por qué es esto.
Dan Bechard
44
El comentario de @MacSigler Justin sigue siendo correcto en el sentido de que si no obliga explícitamente a la cultura a ingresar a EE. UU., Heredará la configuración de cultura de la máquina local. Tengo entendido que compilar el código anterior y luego ejecutarlo en dos máquinas con diferentes culturas (con diferentes separadores de números) produciría resultados diferentes. Si desea que siempre produzca una coma, debe establecer explícitamente una cultura que utilice la coma (por ejemplo, invariante).
Dan Bechard
98
Si desea una cultura específica, puede probar esto:
El método ": n" es mejor ya que debe respetar la configuración regional del usuario.
Torlack
12
Esto es cierto, pero no se garantiza que le dé comas en el punto mil porque respeta la configuración regional del usuario.
Stephen Wrighton
2
De vuelta a usted: eso es cierto, pero no se garantiza que respete la configuración regional del usuario porque utiliza comas como separador de miles. (Como ejemplo, en Portugal la coma es en cambio el separador decimal.)
ANeves
1
Si desea imponer valores después de. necesita reemplazar el # con un 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : Zero reemplaza el cero con el dígito correspondiente si está presente; de lo contrario, aparece cero en la cadena de resultados, mientras que el símbolo "#" se reemplaza con el dígito correspondiente si hay uno presente; de lo contrario, no aparece ningún dígito en la cadena de resultados.
Clarice Bouwer
este método funcionó bien para mi requisito, la página msdn sobre el método Int32.ToString que sería un lugar primario donde se usaría msdn.microsoft.com/en-us/library/8wch342y.aspx no es muy útil para este particular aplicación cualquiera
stackuser83
33
La respuesta más votada fue excelente y ha sido útil durante aproximadamente 7 años. Con la introducción de C # 6.0 y específicamente la Interpolación de cadenas, hay una forma más ordenada y, en mi opinión, más segura de hacer lo que se ha pedido 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
Donde la variable i se coloca en lugar del marcador de posición (es decir {0}). Por lo tanto, no es necesario recordar qué objeto va a qué posición. El formato (es decir :n) no ha cambiado. Para obtener una característica completa de las novedades, puede ir a esta página .
Si desea forzar un separador "," independientemente de la cultura (por ejemplo, en un mensaje de seguimiento o registro), el siguiente código funcionará y tiene el beneficio adicional de decirle al siguiente tipo que se topa exactamente lo que está haciendo.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
Tenga en cuenta que el valor que está formateando debe ser numérico. No parece que tome una representación de cadena de un número y el formato es con comas.
Puede utilizar una función como esta para formatear números y, opcionalmente, pasar los decimales deseados. Si no se especifican lugares decimales, usará dos lugares decimales.
Yo uso decimal pero puedes cambiar el tipo a cualquier otro o usar un objeto anónimo. También puede agregar la verificación de errores para valores decimales negativos.
El método que solía no preocuparme más por las culturas y los posibles problemas de formato es que lo formateé como moneda y luego saqué el símbolo de moneda.
Este código no es independiente de la cultura: utilizará la cultura predeterminada establecida en la máquina que ejecuta el código. Esto podría crear resultados no deseados donde esa cultura coloca sus símbolos de moneda al final del número en lugar del inicio (por ejemplo fr-FR), o usa más de un carácter para denotar la moneda (por ejemplo da-DK), o no separa miles usando comas (por ejemplo, la mayoría de Europa continental).
devuelto el
-2
¡A continuación se muestra una buena solución en Java!
o para obtener una forma más sólida, es posible que desee obtener la ubicación de un lugar en particular, luego use lo siguiente:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
SALIDA de US Locale: $ 9,999,999.00
Salida de configuración regional alemana
Locale locale =newLocale("de","DE");
SALIDA: 9.999.999,00 €
Salida de la configuración regional india
Locale locale =newLocale("de","DE");
SALIDA: Rs.9,999,999.00
Salida de la configuración regional de Estonia
Locale locale =newLocale("et","EE");
SALIDA: 9999999 €
Como puede ver en diferentes salidas, no tiene que preocuparse de que el separador sea una coma o un punto o incluso un espacio , puede obtener el número formateado de acuerdo con los estándares i18n
bien manchado correctamente, ¿se puede utilizar al obtener la instancia de moneda como: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); corregido el código, gracias!
Anirudh
3
¿Has revisado las etiquetas? ¡La pregunta es sobre C # no Java!
Salar
-3
Si desea mostrarlo en DataGridview, debe cambiar su tipo, ya que el valor predeterminado es String y, dado que lo cambia a decimal, lo considera como Número con punto flotante
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);
También funciona sin decimales.string.Format("{0:n0}", Double.Parse(yourValue));
Encontré que esta es la forma más simple:
fuente
fuente
,
como un separador de miles, por ejemplo, un espacio o incluso.
..
. Ej. ), .NET reemplazará automáticamente la coma con ese separador. Una vez más, le insto a que lea el enlace publicado por Roger si aún no entiende por qué es esto.Si desea una cultura específica, puede probar esto:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19,950,000.00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Nota: Algunas culturas suelen
,
significar decimales en lugar de.
tener cuidado.fuente
Formatos estándar, con sus salidas relacionadas,
Ejemplo de salida (cultura en-us):
fuente
Este es el mejor formato. Funciona en todos esos casos:
fuente
Eso te dará comas en los puntos relevantes.
fuente
La respuesta más votada fue excelente y ha sido útil durante aproximadamente 7 años. Con la introducción de C # 6.0 y específicamente la Interpolación de cadenas, hay una forma más ordenada y, en mi opinión, más segura de hacer lo que se ha pedido
to add commas in thousands place for a number
:Donde la variable
i
se coloca en lugar del marcador de posición (es decir{0}
). Por lo tanto, no es necesario recordar qué objeto va a qué posición. El formato (es decir:n
) no ha cambiado. Para obtener una característica completa de las novedades, puede ir a esta página .fuente
tan simple como esto:
Más información está aquí
fuente
Si desea forzar un separador "," independientemente de la cultura (por ejemplo, en un mensaje de seguimiento o registro), el siguiente código funcionará y tiene el beneficio adicional de decirle al siguiente tipo que se topa exactamente lo que está haciendo.
conjuntos formateados a "19,400,320"
fuente
El siguiente ejemplo muestra varios valores formateados mediante cadenas de formato personalizadas que incluyen cero marcadores de posición.
O
resultado "29,255.0"
O
resultado "29,255.00"
fuente
fuente
Más simple, usando la interpolación de cadenas en lugar de String.Format
o usando su variable
fuente
Por ejemplo,
String.Format("{0:0,0}", 1);
devuelve 01, para mí no es válidoEsto funciona para mi
salida 19,950,000
fuente
Tenga en cuenta que el valor que está formateando debe ser numérico. No parece que tome una representación de cadena de un número y el formato es con comas.
fuente
fuente
C # 7.1 (¿quizás antes?) Hace que esto sea tan fácil y atractivo como debería ser, con interpolación de cadenas:
fuente
Puede utilizar una función como esta para formatear números y, opcionalmente, pasar los decimales deseados. Si no se especifican lugares decimales, usará dos lugares decimales.
Yo uso decimal pero puedes cambiar el tipo a cualquier otro o usar un objeto anónimo. También puede agregar la verificación de errores para valores decimales negativos.
fuente
El método que solía no preocuparme más por las culturas y los posibles problemas de formato es que lo formateé como moneda y luego saqué el símbolo de moneda.
if (decimal.TryParse(tblCell, out result))
fuente
fr-FR
), o usa más de un carácter para denotar la moneda (por ejemploda-DK
), o no separa miles usando comas (por ejemplo, la mayoría de Europa continental).¡A continuación se muestra una buena solución en Java!
o para obtener una forma más sólida, es posible que desee obtener la ubicación de un lugar en particular, luego use lo siguiente:
SALIDA de US Locale: $ 9,999,999.00
Salida de configuración regional alemana
SALIDA: 9.999.999,00 €
Salida de la configuración regional india
SALIDA: Rs.9,999,999.00
Salida de la configuración regional de Estonia
SALIDA: 9999999 €
Como puede ver en diferentes salidas, no tiene que preocuparse de que el separador sea una coma o un punto o incluso un espacio , puede obtener el número formateado de acuerdo con los estándares i18n
fuente
locale
??Si desea mostrarlo en DataGridview, debe cambiar su tipo, ya que el valor predeterminado es String y, dado que lo cambia a decimal, lo considera como Número con punto flotante
fuente