相关疑难解决方法(0)

C#Decimal.Parse问题用逗号

这是我的问题(对于en-US):

Decimal.Parse("1,2,3,4") 返回1234,而不是抛出InvalidFormatException.

大多数Windows应用程序(Excel en-US)不会删除千位分隔符,也不会将该值视为十进制数.其他语言也会出现同样的问题(尽管字符不同).

还有其他十进制解析库可以解决这个问题吗?

谢谢!

c# parsing decimal

21
推荐指数
2
解决办法
3万
查看次数

decimal.TryParse很高兴接受格式错误的数字字符串

有没有办法让C#TryParse()函数更严格一些?

现在,如果你传入一个包含数字,正确的十进制和千位分隔符的字符串,它通常似乎接受它们,即使格式没有意义,例如: 123''345'678

如果数字格式不正确,我正在寻找一种TryParse 不成功的方法.

所以,我的总部设在苏黎世,如果我这样做:

decimal exampleNumber = 1234567.89m;
Trace.WriteLine(string.Format("Value {0} gets formatted as: \"{1:N}\"", exampleNumber, exampleNumber));
Run Code Online (Sandbox Code Playgroud)

...然后,根据我的区域设置,我得到了......

Value 1234567.89 gets formatted as: "1'234'567.89"
Run Code Online (Sandbox Code Playgroud)

所以你可以看到,对于我的区域,小数位字符是一个句号,千分隔符是一个撇号.

现在,让我们创建一个简单的函数来测试是否string可以将其解析为decimal:

private void ParseTest(string str)
{
    decimal val = 0;
    if (decimal.TryParse(str, out val))
        Trace.WriteLine(string.Format("Parsed \"{0}\" as {1}", str, val));
    else
        Trace.WriteLine(string.Format("Couldn't parse: \"{0}\"", str));
}
Run Code Online (Sandbox Code Playgroud)

好吧,让我们用几个字符串来调用这个函数.

您认为以下哪个字符串可以被此函数成功解析?

以下是我得到的结果:

ParseTest("123345.67");         //  1. Parsed "123345.67" as 123345.67
ParseTest("123'345.67");        //  2. Parsed "123'345.67" as 123345.67
ParseTest("123'345'6.78");      // …
Run Code Online (Sandbox Code Playgroud)

c# parsing

10
推荐指数
1
解决办法
965
查看次数

Double.TryParse()忽略NumberFormatInfo.NumberGroupSizes?

我想知道我是否遗漏了某些东西......我正在按照标准的英国文化运作.

Double result = 0;
if (Double.TryParse("1,2,3", NumberStyles.Any, CultureInfo.CurrentCulture, out result))
{
   Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)

预期的产出将毫无意义......"1,2,3"不应该解析为双倍.不过确实如此.根据.NET 2.0 MSDN文档

AllowThousands表示数字字符串可以有组分隔符; 例如,将数百个与数千个分开.有效的组分隔符由NumberFormatInfo的NumberGroupSeparator和CurrencyGroupSeparator属性确定,每个组中的位数由NumberFormatInfo的NumberGroupSizes和CurrencyGroupSizes属性确定.

允许数千包含在NumberStyles.Any中.对于我的文化,NumberGroupSizes是3.这只是Double.Parse中的一个错误吗?似乎不太可能,但我无法发现我做错了什么......

.net c# double parsing

7
推荐指数
1
解决办法
2371
查看次数

asp.net mvc复选框不一致

我正在使用ASP.NET MVC表单上的复选框,如下所示:

<%=Html.CheckBox("AgreeToRules", Model.AgreeToRules)%>
Run Code Online (Sandbox Code Playgroud)

模型上的AgreeToRules属性是一个布尔值.在测试期间,这一切都很好.但是,现在我们已经开始使用这个应用程序了,我发现以下消息传递中出现了相对较小但很多的错误:

System.Web.HttpUnhandledException:抛出了类型'System.Web.HttpUnhandledException'的异常.---> System.InvalidOperationException:从类型'System.String'到类型'System.Boolean'的参数转换失败.有关更多信息,请参阅内部异常.---> System.FormatException:Y不是Boolean的有效值.---> System.FormatException:String未被识别为有效的布尔值.

这似乎发生在视图引擎尝试在帖子后呈现表单时,并且从ValueProvider返回的复选框的值如下所示:

Y,假

要么

N,假

以原始形式呈现的html如下所示:

<input id="AgreeToRules" name="AgreeToRules" type="checkbox" value="true" />
<input name="AgreeToRules" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)

在测试期间,我期望(并显示)发布的值看起来像:

真假

如果选中或

如果没有检查.那么N和Y来自哪里?

我将用户代理添加到从错误处理程序返回的信息列表中,并且出现(到目前为止)所有错误都发生在带有FF 3.0.10的Windows XP下,但这正是我测试过的并且问题没有在测试过程中存在

有什么想法吗?

checkbox asp.net-mvc

5
推荐指数
1
解决办法
4447
查看次数

标签 统计

c# ×3

parsing ×3

.net ×1

asp.net-mvc ×1

checkbox ×1

decimal ×1

double ×1