3

システムには、ユーザーが選択した地域設定に従って数値と通貨をフォーマットするコードがあります。ユーザーの 1 人が 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 の間で小数点記号と桁のグループ化が変更された理由は何ですか?

ウィキペディアによると、「南アフリカがメートル法を採用したとき、小数点記号としてコンマを採用しました。」これは、この設定がある時点で変更されたことを意味しますが、フレームワークのバージョンが異なると動作が異なる理由についてはまだわかりません。

4

1 に答える 1

2

.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 以降では、実際に OS からグローバリゼーション データをロードすると述べています (そのため、en-za は異なるオペレーティング システムで、異なる時点で異なるように表示される可能性があります)。また

絶え間なく変化する世界のため、グローバリゼーション情報はいつでも変更される可能性があります。開発者は、グローバリゼーション プロパティの値がリリース間、または .NET Framework の同じリリースに対しても保持されることを期待すべきではありません。

于 2010-07-24T07:38:44.413 に答える