Я пытаюсь определить, должен ли символ валюты для данной культуры отображаться в начале или в конце значения. Я не смог найти этот бит информации в .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