2010-10-06 19 views
12

I tienen un método que devuelve números como esto:C# decimal separator?

public decimal GetNumber() 
{ 
    return 250.00m; 
} 

Ahora, cuando este valor se imprime a la consola por ejemplo, tiene una coma (250,00) en lugar de un punto (250,00). Siempre quiero un punto aquí, ¿qué estoy haciendo mal?

+6

Si no lo sabe: ',' ​​se utiliza como un separador decimal en muchos países europeos, como Alemania, Francia e Italia. ¿Quizás tienes tu cultura establecida en uno de estos lugares? –

+0

He probado esta función en una aplicación de consola y funciona bien para mí. Se muestra con el punto (250.00). –

Respuesta

48

decimal no tiene formato, no tiene coma ni punto.

Es cuando lo convierte en una cadena que obtendrá eso. Puede asegurarse de obtener un punto especificando la referencia cultural de todos:

using System; 
using System.Globalization; 
using System.Threading; 

class Test 
{ 
    static void Main() 
    { 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 
     decimal d = 5.50m; 
     string withComma = d.ToString(); 
     string withDot = d.ToString(CultureInfo.InvariantCulture); 
     Console.WriteLine(withComma); 
     Console.WriteLine(withDot); 
    } 
} 
+1

System.Globalization.CultureInfo germanCultureInfo = new System.Globalization.CultureInfo ("de-DE"); decimal d = 0.3m; cadena s1 = d.ToString (germanCultureInfo); -> s1 es 0.3 no 0,3. ¿Por qué? – Offler

+1

@Offler: No puedo reproducir eso - ese * código * exacto me da "0,3". –

+1

sucedió en una máquina de clientes. Estaba buscando en Internet para descubrir por qué ... La solución ahora se encuentra en la PC de los clientes - La configuración de Windows cambió. – Offler

6

Como se explica por Jon Skeet, debe especificar el cultivo utilizado para formatear el string:

var str = GetNumber().ToString(System.Globalization.CultureInfo.InvariantCulture); 

Es una buena práctica utilice siempre la sobrecarga ToString en la que especifica la cultura. De lo contrario, .NET utilice el hilo actual Culture, que escribiría diferente strings a la salida en función de la configuración regional del PC ...

+1

... por otro lado, podría ser que usar la corriente la configuración regional en la PC (dado que no estamos hablando de la aplicación web) es el comportamiento preferido. Después de todo, eso sería lo que el usuario está acostumbrado a ver. –

+2

Sí, estoy de acuerdo contigo. Es un comportamiento válido cuando la cadena se utilizará en la interfaz de usuario. Pero puede ser un problema real cuando la cadena se utiliza para realizar algún tipo de serialización.En este caso, la deserialización puede fallar dependiendo de la configuración regional de la PC que se está ejecutando ... Y no verá esto antes de que el producto se envíe a una plataforma con una configuración regional diferente. Prefiero tomarme unos segundos para pensarlo (y tomar una decisión razonable al respecto) que lamentarlo más tarde. – Eilistraee

0

He comprobado con Visual Studio 2008 (aplicación de consola) y su no mostrar "" en lugar de "." , por favor proporciona más detalles. Creo que es cuestión de cultura-información. proporcione algunos más detalles del código

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.Write(GetNumber()); 
    } 
    public static decimal GetNumber() 
    { 
     return 250.00m; 
    } 

}