Форматирование чисел может быть обработано платформой, если вы используете правильный культура при манипулировании числом.
Console.WriteLine(4.3);
Console.WriteLine(4.3.ToString(CultureInfo.GetCultureInfo("fr-fr")));
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr-fr");
Console.WriteLine(4.3);
Если вы хотите сделать «одноразовый» дисплей, подойдет второй подход. Если вы хотите правильно отображать каждое число, вам действительно следует установить культура текущего потока. Таким образом, любые манипуляции с числами будут правильно обрабатывать десятичные разделители, группировать символы и любые другие вещи, зависящие от культуры.
То же самое касается разбора чисел. Если пользователь вводит 1,234
, как узнать, ввел ли он 1.234
(запятая — десятичный разделитель) или 1234
(запятая — разделитель групп)? Именно здесь культура помогает, поскольку она знает, как отображать числа, а также может использоваться для их правильного анализа:
Console.WriteLine(double.Parse("1,234"));
Console.WriteLine(double.Parse("1,234", CultureInfo.GetCultureInfo("fr-fr")));
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr-fr");
Console.WriteLine(double.Parse("1,234"));
Приведенное выше выведет 1234
(запятая является десятичным разделителем в моей культуре en-us по умолчанию), 1.234
(запятая является десятичным разделителем во французском языке) и 1,234
(опять же, запятая является десятичным разделителем во французском языке, а также для культуры задан французский язык, поэтому он отображается с использованием этой культуры - отсюда и запятая в качестве десятичного разделителя в выводе).
person
adrianbanks
schedule
13.10.2009