2011-03-29 91 views
0

使用Silverlight我有下面的代码的麻烦转化的AR-EG货币字符串回到正常数量:遇到问题在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

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

如果你想要的值向后和向前走从数格式化字符串把格式化的XAML:

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

Source

既然你在XAML你不是”我们需要首先从文本中去掉货币符号。您可以从RegionInfo.CurrencySymbol Property以及culture.NumberFormat.CurrencySymbol获得货币符号,然后在传递到double.Parse之前将其从格式化文本中删除。

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

+0

是的,那很好 - 除非我需要发生的事情远离任何可能是XAML库(认为在Silverlight中编译的SOAP通信库的基类)。 – 2011-03-29 21:09:37

+0

@杨小姐 - 嗯。在这种情况下,您需要先关闭货币符号。 – ChrisF 2011-03-29 21:11:03

+0

太棒了!这工作。 – 2011-03-29 21:29:43