2009-04-15 21 views
31

Estoy tratando de no usar el '' carbón como un separador de miles cuando se muestra una cadena, sino para utilizar un espacio en su lugar. Creo que necesito definir una cultura personalizada, pero parece que no lo hago bien. ¿Alguna sugerencia?Utilice una costumbre separador de miles en C#

por ejemplo: 1000000 pantalla como 1 000 000 en lugar de 1.000.000

(no, String.Replace() no es la solución que me gustaría usar: P)

+0

¿Qué pasa con el uso de String.Replace()? –

+1

@Jon B: porque Replace no sería culturalmente independiente. ¿Qué pasa si estás corriendo en una computadora donde están los mil sep? ? –

+0

y como ya estoy formateando el número, estaría abarrotando el código – Luk

Respuesta

63

le sugiero que encontrar un NumberFormatInfo la que más se aproxime lo que desea (es decir, está separado del separador de miles), llame al Clone() y luego configure la propiedad NumberGroupSeparator. (Si va a formatear los números usando formatos de moneda, necesita cambiar también el CurrencyGroupSeparator). Úselo como la información de formato para sus llamadas al string.Format, etc., y debería estar bien. Por ejemplo:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = (NumberFormatInfo) 
      CultureInfo.InvariantCulture.NumberFormat.Clone(); 
     nfi.NumberGroupSeparator = " "; 

     Console.WriteLine(12345.ToString("n", nfi)); // 12 345.00 
    } 
} 
+0

@Jon: Eres muy rápido ... pero normalmente al grano y exacto. – Lucero

+0

¿Esa marca de Skeet LoadBalancer tiene problemas de enrutamiento? –

+0

¡Guau, gracias Jon! – Luk

1

La manera más fácil ...

num.ToString("### ### ### ### ##0.00") 
+5

Aunque esto funciona, en realidad producirá espacios delante del número. Por ejemplo, el número 1 tendría 4 espacios en frente de él. Así que al menos tendrás que recortarlo. Creo que la mejor solución es ajustar NumberFormatInfo si desea anular el formato predeterminado de Cultura. – Johncl

4

Hay una versión ligeramente más simple de Jon Skeet uno:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = new NumberFormatInfo {NumberGroupSeparator = " ", NumberDecimalDigits = 0}; 

     Console.WriteLine(12345678.ToString("n", nfi)); // 12 345 678 
    } 
} 

Y la inicialización 'NFI' podría ser omitido y poner directamente como parámetro en el ToString() método.

+0

Eso es básicamente la respuesta de John Skeet reescrita. ¡No exactamente creativo o más corto! –

Cuestiones relacionadas