Почему группировка цифр и десятичный разделитель изменились для en-ZA с .NET 3.5 на .NET 4.0? - PullRequest
3 голосов
/ 23 июля 2010

В нашей системе есть код для форматирования чисел и валюты в соответствии с региональными настройками, выбранными пользователем. Один из наших пользователей выбрал en-ZA и заметил, что группировка цифр и десятичные разделители изменились с переходом на .NET 4.0.

Я написал фрагмент кода, чтобы проиллюстрировать это изменение:

using System;
namespace regional
{
    class Program
    {
        static void Main(string[] args)
        {
            var ci = new System.Globalization.CultureInfo("en-ZA");
            var output = 1234567.00m.ToString("c", ci);
            Console.WriteLine(output);            
        }
    }
}

В .NET 3.5 мы получаем вывод, который выглядит следующим образом:

R 1,234,567.00

В .NET 4.0 мы получаем вывод, который выглядит следующим образом:

R 1 234 567,00

Что объясняет изменение в десятичном разделителе и группировке цифр между .NET 3.5 и .NET 4.0?

Согласно Википедии, «когда Южная Африка приняла метрическую систему, она приняла запятую в качестве десятичного разделителя». Это подразумевает, что этот параметр изменился в какой-то момент, но я до сих пор не понимаю, почему поведение отличается в разных версиях платформы.

1 Ответ

2 голосов
/ 24 июля 2010

Такие команды .net проверяют такие отзывы на основе отзывов потребителей - вероятно, достаточно много людей обратились к ним с просьбой сказать, что существующие настройки неверны, поэтому они изменили их.

http://msdn.microsoft.com/en-us/library/dd997383.aspx#updated_globalization_property_values

в основном говорит "мы обновляем настройки глобализации между версиями", а

http://msdn.microsoft.com/en-us/library/dd997383.aspx#getting_current_globalization_information

говорит, что начиная с Windows 7 они фактически загружают данные глобализации из ОС (поэтому потенциально en-za будет выглядеть по-разному в разных операционных системах в разные моменты времени). Также

Из-за постоянно меняющегося мира информация о глобализации может изменяться в любое время; разработчики не должны ожидать, что значения свойств глобализации сохранятся между выпусками или даже для одного и того же выпуска .NET Framework

...