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?
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);
}
}
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
...
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).
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;
}
}