解析两个符号。并且,作为ASP.NET中的十进制数字分隔符

时间:2010-05-05 10:00:20

标签: .net asp.net sql-server-2008 parsing delimiter

我正在写一个银行系统,我的客户希望以十进制数字分隔符支持俄语和美国数字标准。分别为.,

现在只有,正常工作。也许是因为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);
   }
}

还有其他想法吗?

2 个答案:

答案 0 :(得分:3)

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

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值。

此外,AFAIK NumberFormatInfo类不接受多个分隔符值(例如",."NumberDecimalSeparator属性CurrencyDecimalSeparator

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

答案 1 :(得分:1)

如何使用String.Format作为货币?

这是一个简短的例子:

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

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