1

Windowsで使用されている通貨記号を取得したいのですが。この記号は、コントロールパネルの[地域と言語]オプションを使用して表示および変更できます。

RegionInfo.CurrentRegion現在のスレッドで使用されている言語の地域情報を表します。RegionInfo.CurrentRegion.CurrencySymbolしたがって、オペレーティングシステムのユーザーが選択した通貨記号と必ずしも一致するとは限りません。

[地域と言語] >[詳細設定... ] >[通貨]で通貨記号だけを変更した場合、C#プログラムからその記号にアクセスできるようにしたいと思います。これはどのように行うことができますか?

私の投稿を読んでいただきありがとうございます。

4

5 に答える 5

3

は、RegionInfoユーザーが変更した設定を反映していません。私は何かのようなものだと思います

CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol

動作します。

追加(回答が受け入れられた後):

少しテストしましたが、場合によってRegionInfo ユーザー設定を反映しているようです。仕様には次のように記載されていますが、CultureInfoとは対照的に、RegionInfoはユーザーの好みを表さず、ユーザーの言語や文化に依存しません。

私のWindows7PCでは、次の結果が得られます。(ゲッターを使用するのではなく)のインスタンスRegionInfoを作成した場合でも、ユーザー設定が反映されます。だから今、私たちは混乱しています。newRegionInfoCurrentRegion

于 2012-08-16T14:56:46.153 に答える
2

これは、 RegionInfo.CurrencySymbol内にあります。

于 2012-08-16T14:24:19.250 に答える
1

元の仮定が正しいと確信していますか?「地域と言語>追加設定>通貨>通貨記号」で通貨記号を変更/編集すると

以下はそれに応じて変更されます。

RegionInfo.CurrentRegion.CurrencySymbol
于 2012-08-16T14:28:04.750 に答える
0

これが私が今日学んだいくつかの落とし穴です-私の発見を検証する私のコードは以下の通りです。システムをスペイン語-ドミニカ共和国に設定し、通貨記号を「RD$」から「$」に変更しました。次に、カルチャ/UIカルチャをen-USではなくes-DOに設定しました。

  • 使用number.ToString("C2")は、ユーザーがカスタマイズした設定に従いません。したがって、System.Globalization.CultureInfo.CurrentCulture/CurrentUICultureをes-DOに設定して実行1.00M.ToString("C2")すると、RD$1.00が返されます。

  • ユーザーがカスタマイズした設定を実際に使用するには、上記の変更に従って、var info = new CultureInfo("es-DO")変数を用意してから、を使用string.Format(info, "{0:C2}", 1.00M)して予想される$1.00を取得する必要があります。

  • ユーザーのカスタマイズを返さないため、使用できませんstring.Format(CultureInfo.CurrentCulture, "{0:C2}", 1.00M)。この場合、RD$1.00が返されます。

これはばかげていると思いますが、誰かがこの振る舞いの背後にある本当の理由を知っているなら、私が興味を持っているので共有してください。

再現のコードは次のとおりです。

var esdo = new CultureInfo("en-US");
{en-US}
esdo = new CultureInfo("es-DO");
{es-DO}
var resdo = new RegionInfo("es-DO");
{es-DO}
        CurrencyEnglishName: "Dominican Peso"
        CurrencyNativeName: "Peso"
        CurrencySymbol: "$"
        DisplayName: "Dominican Republic"
        EnglishName: "Dominican Republic"
        GeoId: 65
        IsMetric: true
        ISOCurrencySymbol: "DOP"
        Name: "es-DO"
        NativeName: "República Dominicana"
        ThreeLetterISORegionName: "DOM"
        ThreeLetterWindowsRegionName: "DOM"
        TwoLetterISORegionName: "DO"
esdo.NumberFormat
{System.Globalization.NumberFormatInfo}
        CurrencyDecimalDigits: 2
        CurrencyDecimalSeparator: "."
        CurrencyGroupSeparator: ","
        CurrencyGroupSizes: {int[1]}
        CurrencyNegativePattern: 1
        CurrencyPositivePattern: 0
        CurrencySymbol: "$"
        DigitSubstitution: None
        IsReadOnly: false
        NaNSymbol: "NeuN"
        NativeDigits: {string[10]}
        NegativeInfinitySymbol: "-Infinito"
        NegativeSign: "-"
        NumberDecimalDigits: 2
        NumberDecimalSeparator: "."
        NumberGroupSeparator: ","
        NumberGroupSizes: {int[1]}
        NumberNegativePattern: 1
        PercentDecimalDigits: 2
        PercentDecimalSeparator: "."
        PercentGroupSeparator: ","
        PercentGroupSizes: {int[1]}
        PercentNegativePattern: 1
        PercentPositivePattern: 1
        PercentSymbol: "%"
        PerMilleSymbol: "‰"
        PositiveInfinitySymbol: "Infinito"
        PositiveSign: "+"
var dsa = 1.00M;
string.Format(esdo,"{0:C2}",dsa)
"$1.00"
dsa.ToString("C2")
"RD$1.00"
string.Format(System.Globalization.CultureInfo.CurrentCulture,"{0:C2}",dsa)
"RD$1.00"
string.Format(System.Globalization.CultureInfo.CurrentUICulture,"{0:C2}",dsa)
"RD$1.00"
System.Globalization.CultureInfo.CurrentUICulture
{es-DO}
string.Format(esdo,"{0:C2}",dsa)
"$1.00"
于 2014-09-04T18:05:38.133 に答える
-1
//    Do something like that maybe
public static string getSeparator()
        {
            string output = string.Empty;
            try
            {
                RegistryKey reg = Registry.CurrentUser.OpenSubKey("Control Panel").OpenSubKey("International");
                output = reg.GetValue(EnumClass.String.sList.ToString(), output).ToString();

                reg.Dispose();
            }`enter code here`
            catch (Exception ie)
            {
                // catch error
            }
            return output;
        }
于 2016-01-12T11:57:59.027 に答える