在 C# 中:
这会抛出一个 FormatException
,这似乎不应该:
Int32.Parse("1,234");
这不是,这看起来很正常:
Single.Parse("1,234");
令人惊讶的是,这解析得很好:
Single.Parse("1,2,3,4"); //Returns 1234
我的本地文化是 EN-US,所以 ,
是默认的千位分隔符。
主要问题:为什么不一致?
另外:为什么 Parse("1,2,3,4")
有效?它似乎只是在解析之前删除了本地分隔符 char 的所有实例。我知道在正则表达式检查或类似的东西中会有额外的运行时开销,但是数字文字“1,2,3,4”什么时候不是拼写错误?
最佳答案
根据 MSDN :
The s parameter contains a number of the form:
[ws][sign]digits[ws]
The s parameter is interpreted using the NumberStyles.Integer style. In addition to decimal digits, only leading and trailing spaces together with a leading sign are allowed.
就是这样,NumberStyles.Integer 不允许 Parse 方法使用千位分隔符,而 Single.Parse 默认使用 NumberStyles.Float 和 NumberStyles.AllowThousands。您可以通过将第二个参数指定为 NumberStyles 来更改此行为:
Int32.Parse("1,234", NumberStyles.AllowThousands); //works
Single.Parse 忽略分组并且不使用特定于文化的 NumberGroupSizes ,并且只确定字符是组分隔符还是小数分隔符。组大小仅在格式化数字时使用。
关于c# - Int32.Parse 与 Single.Parse - ("1,234") 和 ("1,2,3,4")。为什么 int 和浮点类型以不同方式解析分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751292/