我正在写一个银行系统,我的客户希望以十进制数字分隔符支持俄语和美国数字标准。分别为.
和,
。
现在只有,
正常工作。也许是因为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);
}
}
还有其他想法吗?
答案 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,00
和2000.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.