0

我正在编写一个银行系统,我的客户希望在十进制数字分隔符中同时支持俄罗斯和美国的数字标准。分别.,

现在只能,正常工作。可能是因为 Web 服务器的操作系统格式(设置了俄语)。

字符串之类2000.00的抛出FormatException

输入字符串的格式不正确。

如何解决?我有以下两个想法:

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
   var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
   txtAmount.Text = txtAmount.Text.Replace('.', ',');
}

或者

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
{
   var ru = new CultureInfo("ru-RU");
   var en = new CultureInfo("en-US")

   decimal d;
   var txtAmount = (TextBox)((FormView)sender).FindControl("txtAmount"));
   if (!Decimal.TryParse(value, NumberStyles.Any, ru, out d)
     && Decimal.TryParse(value, NumberStyles.Any, en, out d)
   {
       // data isn't in Russian format but is in American
       txtAmount.Text = d.ToString(ru);
   }
}

还有其他想法吗?

4

2 回答 2

3

您可以先尝试解析为俄语格式,然后(如果不成功)再解析为美国:

CultureInfo ru = CultureInfo.GetCultureInfo("ru-RU");
CultureInfo us = CultureInfo.GetCultureInfo("en-US");

string value = "2000,00";
decimal result;
if (!decimal.TryParse(value, NumberStyles.Any, ru, out result))
{
    if (!decimal.TryParse(value, NumberStyles.Any, us, out result))
    {
        throw new FormatException();
    }
}

这应该适用于2000,002000.00值。

此外,AFAIKNumberFormatInfo类不接受分隔符的多个值(例如",."forNumberDecimalSeparatorCurrencyDecimalSeparator属性)。

假设,String.Replace也不是一个好主意,因为美国文化使用逗号作为组分隔符(RU 使用空格)。

于 2010-05-05T10:13:23.593 回答
1

使用 String.Format 作为货币怎么样?

这是一个简短的例子:

decimal money = 999.99m;
string html = String.Format("Total: {0:C}", money);

可以在此处找到有关如何使用 String.Format + 特定文化的信息。

于 2010-05-05T10:15:13.010 回答