为什么int.TryParse不能解析分号(但double.TryParse可以)?

use*_*190 4 c# format locale numbers

在C#中,为什么int.TryParse不能解析分号(但double.TryParse可以)?

        int i1 = 13579;
        string si1 = i1.ToString("N0");  //becomes 13,579
        int i2 = 0;
        bool result1 = int.TryParse(si1, out i2); //gets false and 0

        double d1 = 24680.0;
        string sd1 = d1.ToString("N0"); //becomes 24,680
        double d2 = 0;
        bool result2 = double.TryParse(sd1, out d2); //gets true and 24680.0
Run Code Online (Sandbox Code Playgroud)

???

Gra*_*ICA 5

您必须指定允许NumberStyles,在将字符串解析回数字时会考虑到这一点.

确定传递给整数和浮点数字类型的Parse和TryParse方法的数字字符串参数中允许的样式.

这将返回true并存储预期的数字i2:

bool result1 = int.TryParse(si1,
   NumberStyles.AllowThousands, CultureInfo.CurrentCulture.NumberFormat, out i2);
Run Code Online (Sandbox Code Playgroud)

您可能还想看看其他NumberStyles选项.例如,NumberStyles.Number允许数千,小数点,空格等.


int.TryParse(如果未指定)的默认值为NumberStyles.Integer,仅允许前导符号,前导和尾随空格.

double.TryParseis 的默认值NumberStyles.Float| NumberStyles.AllowThousands,允许前导符号和空格,以及数千,指数和小数点.