Возникли проблемы с преобразованием строки валюты ar-EG обратно в обычное число в Silverlight - PullRequest
0 голосов
/ 30 марта 2011

при использовании Silverlight У меня проблемы со следующим кодом:

        CultureInfo culture = new CultureInfo("ar-EG");
        CultureInfo invCulture = CultureInfo.InvariantCulture;

        Result.Text = String.Format(culture.NumberFormat, "{0:C}", 70000000.00);

        // Does Not Work
        //Result2.Text = String.Format(invCulture.NumberFormat, "{0}", double.Parse(Result.Text, invCulture));

        // Does Not Work
        //Result2.Text = String.Format(culture.NumberFormat, "{0}", double.Parse(Result.Text, culture.NumberFormat));

        // Does Not Work
        //Result2.Text = Convert.ToString(Decimal.Parse(Result.Text.Replace(" ", ""), NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowTrailingWhite));

В конечном итоге я хотел бы доказать, что я могу преобразовать число в строку в формате египетской (арабской) валюты, а затем снова получить свой исходный номер.

Каждый раз, когда я пытаюсь преобразовать свой номер обратно в исходное двойное или десятичное число, я получаю ошибку FormatException «Входная строка была в неправильном формате.».

Любая помощь, пожалуйста?

1 Ответ

1 голос
/ 30 марта 2011

Вы не сможете преобразовать выходную строку обратно в число, используя double.Parse, так как это предполагает, что ввод будет чисто числовым.

Если вы хотите, чтобы значение двигалось вперед и назад от числа к форматированной строке, поместите форматирование в XAML:

<TextBlock Text={Binding NumericValue, StringFormat=c, Mode=TwoWay} />

Источник

Учитывая, что вы не в XAML, вам сначала нужно удалить символ валюты с текста. Вы можете получить символ валюты из свойства RegionInfo.CurrencySymbol , а также culture.NumberFormat.CurrencySymbol, а затем удалить его из отформатированного текста перед переходом к double.Parse.

Как указывает г-н Янг в своем комментарии, существует перегрузка Decimal.Parse, которая занимает String и IFormatProvider, которые предоставляют дополнительную информацию о строке - например, тот факт, что она содержит символ валюты.

...