我試圖確定給定文化的貨幣符號是否應出現在值的開始或結尾。我一直沒能找到在.NET的CultureInfo信息這一點,所以我想我會嘗試一個黑客:如何確定文化的貨幣符號位置
var cultures = new[] {"en-US", "ar-SA", "as-IN", "tr-TR"};
foreach (var culture in cultures) {
var cultureInfo = CultureInfo.CreateSpecificCulture(culture);
var currencyValue = 1.234.ToString("C", cultureInfo);
var rtl = cultureInfo.TextInfo.IsRightToLeft;
var symbolAtBeginning = currencyValue.StartsWith(cultureInfo.NumberFormat.CurrencySymbol, false, cultureInfo);
}
唉,這種方法僅適用有時候;在上面的例子中,它適用於「en-US」,但不適用於其他文化。起初我認爲這是因爲一些文化從右向左閱讀文本,「開始」將是正確的一面,但這種解釋沒有被證明。
有沒有人看到我的代碼中的缺陷,或者最好有一個更好的方法來確定貨幣符號位置?
歐元前,葡萄牙語escudo($)的貨幣符號定位在小數點位置(123 $ 45表示123.45 ESC)。不確定任何當前貨幣是否具有此特徵。在這種情況下,我猜NumberFormatInfo.CurrencySymbol應該是一個空字符串,所以不能用於確定它的位置,而NumberFormatInfo.CurrencyDecimalSeparator應該是「$」。 – Joe