これが私が今日学んだいくつかの落とし穴です-私の発見を検証する私のコードは以下の通りです。システムをスペイン語-ドミニカ共和国に設定し、通貨記号を「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"