千位分隔符转整数

12

我想将千位分隔符的数值转换为整数,但是遇到了一个异常。

double d = Convert.ToDouble("100,100,100"); 

正在正常工作并获得d=100100100

int n = Convert.ToInt32("100,100,100");

得到了一个格式异常。

输入字符串的格式不正确。

为什么会出现这种情况?


我不想这么说,但我怀疑“为什么?”的答案是“因为”,我猜这是一个任意决定,认为整数没有逗号或句号。 - Lazarus
4个回答

30

试试这个:

int i = Int32.Parse("100,100,100", NumberStyles.AllowThousands);

请注意,Parse方法在无效的字符串上会引发异常,因此您可能还想查看TryParse方法:

string s = ...;
int i;
if (Int32.TryParse(s, NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out i))
{
    // if you are here, you were able to parse the string 
}

1
Int32.Parse也可以有一个"格式参数": Int32.Parse("100,100,100", NumberStyles.AllowThousands, CultureInfo.InvariantCulture); - ralf.w.
Int32.TryParse 的默认 NumberStyles 是 NumberStyles.Integer,因此要添加可选的千位分隔符,NumberStyles 应该是 (NumberStyles.Integer | NumberStyles.AllowThousands)。 - Valid
NumberStyles.AllowThousands 让我免去了烦恼,谢谢! - Cheese Widget

1

在你的例子中,Convert.ToInt32 实际调用的是 Int32.Parse

Int32.parse(string) 方法只允许三种类型的输入:空格、符号和数字。以下是一个配置样例: [ws][sign]digits[ws](方括号内为可选项)。

由于你的输入包含了逗号,导致程序抛出异常。


0

因为你应该指定一个包含纯整数数字(可能带有+/-符号)的字符串,没有千位分隔符。在将字符串传递给ToInt32例程之前,必须替换分隔符。


我认为原帖作者已经了解了这一点,但是他想知道为什么会这样。 - Lazarus
编辑并添加了解释。 - Andrea Pigazzini

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接