В C# десятичный разделитель?

У меня есть метод, который возвращает номера такой:

public decimal GetNumber()
{
    return 250.00m;
}

теперь, когда это значение печатается на консоли, например, оно имеет запятую (250,00) вместо точки (250.00). Я всегда хочу знать, что я делаю не так.

4 ответов


decimal сам по себе не имеет форматирования - у него нет ни запятой, ни точки.

это когда вы преобразуете его в строку, которую вы получите. Вы можете убедиться, что получите точку, указав инвариантную культуру:

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

как объяснил Джон Скит, вы должны указать культуру, используемую для форматирования string:

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

это хорошая практика, чтобы всегда использовать ToString перегрузка, в которой вы указываете культуру. В противном случае, .NET использовать текущий поток Culture, который бы писал разные strings к выходу в соответствии с локали PC...


локали форматирование?

http://en.wikipedia.org/wiki/File:DecimalSeparator.svg (Зеленый цвет равен запятой, поэтому, если вы вызываете ToString() на десятичном, используя информацию о культуре любого из этих местоположений, вы увидите запятую).


Я проверил его с помощью visual studio 2008 (консольное приложение) и его не отображается "," вместо ".", пожалуйста, предоставьте более подробную информацию. Я думаю, это вопрос культуры-информации. пожалуйста, предоставьте дополнительные сведения о коде

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

}