separador quitar numeros moneda miles formato formatear decimales dar con coma bootstrap .net string formatting

.net - quitar - Formatea un número con comas, pero mantén los decimales



separador de miles y decimales c# (6)

Esto parece hacer exactamente lo que quieres:

public void Code(params string[] args) { Print(1000); Print(100000); Print(123.456); Print(100000.21 ); Print(100200.123456); } void Print(double n) { Console.WriteLine("{0:###,###.#######}", n); } 1,000 100,000 123.456 100,000.21 100,200.123456

Me gustaría agrupar los dígitos en un doble por miles, pero también la salida sin embargo el número de decimales está realmente en el número. No puedo entender la cadena de formato.

1000 => 1,000 100000 => 100,000 123.456 => 123.456 100000.21 => 100,000.21 100200.123456 => 100,200.123456

Descargo de responsabilidad (no es tan sencillo como crees):

  • Por favor, no me señale esta pregunta , no responde mi pregunta
  • Por favor, no me dirijan a MS DN , los artículos no me han ayudado. (Si cree que los estoy leyendo incorrectamente, léalos usted mismo y publique la respuesta correcta)
  • .ToString("n") no funciona, redondea los dígitos

Esto podría ser un poco lento, pero hará lo que quieras.

public static string FormatNumber(double num) { string s = num.ToString(); string result = ""; if(s.IndexOf(''.'') != -1) { result = s.Substring(s.IndexOf(''.'')); s = s.Substring(0, s.IndexOf(''.'')); } while (s.Length > 3) { result = "," + s.Substring(s.Length - 3); s = s.Substring(0, s.Length - 3); } if (s.Length == 0) return result.Substring(1); return s + result; }


Intenta simplemente usar "#, #", esto agrega las comas para miles y otros, pero no sé si mantendrá los decimales, de lo contrario "#, ###. ########### ######### ", o cualquier número de símbolos ''#'' que desee después del decimal.


Prueba este:

VB:

Dim vals() As Double = {1000, 100000, 123.456, 100000.21, 100200.123456} For Each val As Double in vals Console.WriteLine(val.ToString("###,###.#########")) Next val

DO#:

double[] vals = new double[] {1000, 100000, 123.456, 100000.21, 100200.123456}; foreach (double val in vals) { Console.WriteLine(val.ToString("###,###.#########")); }

El problema es que no hay un formato para manejar una cantidad arbitraria de decimales. Sin embargo, dado que solo puede almacenar una precisión muy limitada, puede usar eso y agregar algunos más # caracteres, según sea necesario, para cubrirlo, suponiendo que esté dispuesto a permitir que corte cualquier 0 insignificante.

Y el enlace de MSDN que publicaste es el lugar exacto donde irías a leer cómo hacerlo.



Un hilo viejo, pero ninguna de las respuestas me parece del todo satisfactoria. La mayoría de ellos convierte a cero en la cadena vacía, incluido el que tiene más votos ascendentes.

Creo que una mejor solución es "#,##0.#################" , que al menos muestra ceros. Todavía es feo. Debe haber una mejor manera.

double[] vals = new double[] { 0.0, 0.1234, -0.1234, 1.0, 123456789.123456, 123456789.0, 0.123456789123456 }; foreach (double val in vals) { Console.WriteLine(val + ": " + val.ToString("#,##0.#################")); }