无法将ar-EG货币字符串转换回Silverlight中的正常数字

时间:2011-03-29 21:01:23

标签: c# string silverlight-4.0 localization globalization

使用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));

最终,我想证明我可以将数字转换为埃及(阿拉伯语)货币格式的字符串,然后再次获取原始数字。

每当我尝试将我的号码转换回原始的double或decimal时,我都会收到FormatException错误'输入字符串的格式不正确。'。

请帮忙吗?

1 个答案:

答案 0 :(得分:1)

您将无法使用double.Parse将输出字符串转换回数字,因为它要求输入纯数字。

如果您希望值从数字前后转发到格式化字符串,请将格式设置为XAML:

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

Source

鉴于您不在XAML中,您需要首先从文本中删除货币符号。您可以从RegionInfo.CurrencySymbol Property以及culture.NumberFormat.CurrencySymbol获取货币符号,然后在传递给double.Parse之前将其从格式化文本中删除。

正如Young先生在他的评论中指出的那样,Decimal.Parse超载需要StringIFormatProvider来提供有关字符串的其他信息 - 例如它包含的事实货币符号。