【问题标题】:Thousand separated value to integer千位分隔值到整数
【发布时间】:2013-07-27 23:43:14
【问题描述】:

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

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

工作正常并获得d=100100100

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

遇到一种格式异常

输入的字符串格式不正确

为什么?

【问题讨论】:

  • 我不想这么说,但我怀疑“为什么?”是“因为”,我怀疑整数没有逗号或句点是任意决定。

标签: c#


【解决方案1】:

试试这个:

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 
}

【讨论】:

  • Int32.Parse 也可以有一个格式参数:Int32.Parse("100,100,100", NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
  • Int32.TryParse 的默认 NumberStyles 是 NumberStyles.Integer 所以要添加可选的千位分隔符,NumberStyles 应该是 (NumberStyles.Integer | NumberStyles.AllowThousands)
  • NumberStyles.AllowThousands 让我免于拔头发。谢谢!
【解决方案2】:

Convert.ToInt32 在您的示例中实际上调用的是Int32.Parse

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

由于您的包含逗号,因此引发了异常。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我认为 OP 已经收集到了这一点,但正在询问为什么会这样。
    • 编辑添加了解释。
    【解决方案4】:

    你不能有分隔符,只有数字 0 到 9 和一个可选的符号。

    http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多