web-dev-qa-db-fra.com

Séparateur décimal C #?

J'ai une méthode qui retourne des nombres comme ceci:

public decimal GetNumber()
{
    return 250.00m;
}

Désormais, lorsque cette valeur est imprimée sur la console, par exemple, elle comporte une virgule (250,00) au lieu d'un point (250,00). Je veux toujours un point ici, qu'est-ce que je fais mal?

15
grady

decimal lui-même n'a pas de format - il n'a ni virgule ni point.

C'est lorsque vous le convertissez en chaîne que vous l'obtenez. Vous pouvez vous assurer que vous obtenez un point en spécifiant la culture invariante:

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);
    }
}
49
Jon Skeet

Comme expliqué par Jon Skeet, vous devez spécifier la culture utilisée pour formater la string:

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

Il est recommandé de toujours utiliser la surcharge ToString dans laquelle vous spécifiez la culture. Sinon, .NET utilise le thread en cours Culture, ce qui permettrait d'écrire strings différent dans la sortie en fonction de la locale de la PC...

7
Eilistraee

Formatage spécifique aux paramètres régionaux?

http://en.wikipedia.org/wiki/File:DecimalSeparator.svg (vert est égal à une virgule, donc si vous appelez ToString() sur votre décimale à l'aide des informations de culture de l'un de ces emplacements, vous verrez un virgule).

1
Tim Medora

Je l'ai vérifié avec Visual Studio 2008 (application console) et le message "," au lieu de "." , veuillez fournir plus de détails. Je pense que sa question de culture-info. veuillez fournir quelques détails supplémentaires sur le code

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

}
0
Dr. Rajesh Rolen