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

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

15 голосов
/ 06 октября 2010

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

public decimal GetNumber()
{
    return 250.00m;
}

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

Ответы [ 4 ]

49 голосов
/ 06 октября 2010

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);
    }
}
7 голосов
/ 06 октября 2010

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

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

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

1 голос
/ 06 октября 2010

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

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

0 голосов
/ 06 октября 2010

Я проверил это с Visual Studio 2008 (консольное приложение), и он не показывает "," вместо "."Пожалуйста, предоставьте более подробную информацию.Я думаю, что это вопрос культуры информации.пожалуйста, предоставьте больше деталей кода

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

}
...