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

У меня есть метод, который возвращает числа, подобные этому:

public decimal GetNumber()
{
    return 250.00m;
}

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Форматирование, специфичное для локали?

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

Ответ 4

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

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

}