使用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错误'输入字符串的格式不正确。'。
请帮忙吗?
答案 0 :(得分:1)
您将无法使用double.Parse
将输出字符串转换回数字,因为它要求输入纯数字。
如果您希望值从数字前后转发到格式化字符串,请将格式设置为XAML:
<TextBlock Text={Binding NumericValue, StringFormat=c, Mode=TwoWay} />
鉴于您不在XAML中,您需要首先从文本中删除货币符号。您可以从RegionInfo.CurrencySymbol
Property以及culture.NumberFormat.CurrencySymbol
获取货币符号,然后在传递给double.Parse
之前将其从格式化文本中删除。
正如Young先生在他的评论中指出的那样,Decimal.Parse
超载需要String
和IFormatProvider
来提供有关字符串的其他信息 - 例如它包含的事实货币符号。