在C#中:
抛出一个FormatException,似乎不应该:
Int32.Parse("1,234");
Run Code Online (Sandbox Code Playgroud)
这不,这似乎是正常的:
Single.Parse("1,234");
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这解析得很好:
Single.Parse("1,2,3,4"); //Returns 1234
Run Code Online (Sandbox Code Playgroud)
我的本地文化是EN-US,,默认的千位分隔符char也是如此.
主要问题:为什么不一致?
另外:为什么Parse("1,2,3,4")工作?它似乎只是在解析之前删除本地分隔符char的所有实例.我知道在正则表达式检查或类似的东西中会有额外的运行时开销,但什么时候数字文字"1,2,3,4"不是拼写错误?
我有一个自定义模型类,其中包含一个十进制成员和一个接受此类的条目的视图.一切都运行良好,直到我添加javascripts来格式化输入控件内的数字.当焦点模糊时,格式代码格式化输入的数字与千位分隔符','.
问题是我的模态类中的十进制值没有与千位分隔符很好地绑定/解析.当我用"1,000.00"测试它时,ModelState.IsValid返回false,但是对于"100.00"没有任何更改它是有效的.
如果您有任何解决方案,请与我分享?
提前致谢.
样本类
public class Employee
{
public string Name { get; set; }
public decimal Salary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
样本控制器
public class EmployeeController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult New()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult New(Employee e)
{
if (ModelState.IsValid) // <-- It is retruning false for values with ','
{
//Subsequence codes if entry is valid.
//
}
return View(e);
}
}
Run Code Online (Sandbox Code Playgroud)
示例视图
<% using (Html.BeginForm())
{ %>
Name: <%= Html.TextBox("Name")%><br /> …Run Code Online (Sandbox Code Playgroud) 我有一个十进制值("133,3")存储在挪威文化中的数据库的字符串列中.
之后,用户将区域设置更改为english-Us.当我使用CultureInfo.InvariantCulture将"133,3"转换为十进制时,获取无效值或错误.
有没有最好的方法来处理C#应用程序中的这种情况?
问候,阿南德