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