英語のロケールでは14780、ドイツ語では14.780が出力されます。しかし、後続のゼロは取っていない。小数変換のローカリゼーション(ドイツ語)
Decimal.Parse(String.Formatの( "{0:N0}"、14780)、System.Globalization.CultureInfo.InvariantCulture)
観測出力:14.78
英語のロケールでは14780、ドイツ語では14.780が出力されます。しかし、後続のゼロは取っていない。小数変換のローカリゼーション(ドイツ語)
Decimal.Parse(String.Formatの( "{0:N0}"、14780)、System.Globalization.CultureInfo.InvariantCulture)
観測出力:14.78
German
(de-DE
)となります。構文解析して文字列に変換するときは、常にParse/TryParse
の文化とFormat
の方法を指定して同じ文化を使用します。 1つは英語(不変)、もう1つはドイツ語を使用すると、小数点とカンマが文化間で逆の意味を持つため、予期しない結果につながります。あなたはその文化が何であるかを知り、それが変更できない限り、スレッドが文化を提供するとは決して考えないでください。コードサンプル:
var value = 14780M;
var strValue = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:n0}", value)
// strValue is equal to "14.780"
は、ここでは、文化をミックスするとき、同じ文化が、改行を使用した場合、それが動作することを示す上記のコードです。
// OK - using InvariantCulture for both
var culture = System.Globalization.CultureInfo.InvariantCulture;
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture));
// OK - using de-DE for both
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), culture));
// FAIL - mixing de-DE and InvariantCulture
culture = System.Globalization.CultureInfo.GetCultureInfo("de-DE");
Console.WriteLine(Decimal.Parse(string.Format(culture, "{0:n0}", 14780), System.Globalization.CultureInfo.InvariantCulture));
は、何千ものseperatorsが格納されていないFiddle
decimal
タイプを参照してください。しかし、小数点を文字列に戻すときに、それらを再構成することができます。
decimal deci = Decimal.Parse(string.Format("{0:n0}", 14780), System.Globalization.CultureInfo.InvariantCulture); // 14780
string str = string.Format("{0:n0}", deci); // 14.780
.NET String.Format() to add commas in thousands place for a number。