【问题标题】:Convert.ToInt32() a string with CommasConvert.ToInt32() 一个带逗号的字符串
【发布时间】:2009-12-01 06:19:56
【问题描述】:

我有一个字符串,有时用逗号分隔数字,如@9​​87654322@,我需要将其转换为 Int,目前它正在引发异常,有人可以告诉我如何解决这个问题,以便有时我可以输入数字带逗号,其他时候不带逗号,它仍然会转换。

【问题讨论】:

  • 转换前去掉逗号。
  • 您不想将其转换为两个整数吗?使用 String.Split()。
  • 我有同样的问题@big-z。我删除了逗号: bool totalPriceConversionResult = decimal.TryParse(txtTotalPrice.Text.Replace(",",""), out totalPrice) 并将其转换为: TotalPrice = totalPriceConversionResult ? Convert.ToInt32(totalPrice) : 0. 但它给了我一个 0 的价值。 stackoverflow.com/questions/37359906

标签: c#


【解决方案1】:

您可以使用int.Parse 并添加NumberStyles.AllowThousands 标志:

int num = int.Parse(toParse, NumberStyles.AllowThousands);

或者int.TryParse告诉你操作是否成功:

int num;
if (int.TryParse(toParse, NumberStyles.AllowThousands,
                 CultureInfo.InvariantCulture, out num))
{
    // parse successful, use 'num'
}

【讨论】:

  • 你在开玩笑,.Net 能做到吗?!不错!
  • 非常好,如果你想解析像十亿这样更大的数字,请使用 NumberStyles.Number 标志。
  • 有点旧,但万一有人遇到这个问题。最好在此处使用 NumberStyles.Number 或 NumberStyles.Float 之类的组合标志,因为它结合在 AllowThousands 以及 AllowTrailingSign 和 AllowDecimalPoint 中,如果您没有它们会破坏 Double.Parse 和 Double.TryParse
  • 为什么int.Parse("1,23,4", NumberStyles.AllowThousands);解析成功?
【解决方案2】:

您可以使用Decimal.Parse(),然后将结果转换为int。这也适用于当前的文化,或者您可以指定要使用的 CultureInfo。无需手动处理逗号、小数点等,这些都是 .NET 内置的。

【讨论】:

    【解决方案3】:

    删除逗号的蛮力建议是什么?如果字符串类似于“1,1,1”怎么办?这是一个有效的数字吗?删除逗号会使其成为有效数字,并使转换在语义上不正确。

    NumberStyles 存在是有原因的,Int.Parse() 方法可以解析或不考虑数字样式。

    【讨论】:

    • int.Parse("1,1,1", NumberStyles.AllowThousands); 返回111,所以.NET 确实认为它是一个有效数字。
    【解决方案4】:

    如果您不必担心各个国家/地区的规则(例如,有些使用逗号作为小数位而不是千位分隔符),那么只需先去掉逗号。

    例如

    string nastyNumber = "1,234";
    int result = int.Parse(nastyNumber.Replace(",", ""));
    

    (如果需要浮点数,将 int 替换为 double)

    【讨论】:

      【解决方案5】:

      您可以在将其转换为 int 之前执行 replace(';', '')

      【讨论】:

      • 谢谢,我不知道它在 C# 中如此简单......我以为我必须做 RegEx 来替换它们。
      【解决方案6】:

      你可以使用代码

      int num = Strings.Replace(str, ",", string.Empty);
      

      这会将所有出现的“,”替换为“”(空字符串)。所以1,000,000转1000000

      【讨论】:

        【解决方案7】:

        您可以在调用Convert.ToInt32() 之前将逗号替换为String.Empty,或者您可以考虑使用Int32.Parse()Int32.TryParse()NumberStyles.AllowThousands 作为参数之一。

        Int32.Parse

        Int32.TryParse

        【讨论】:

          猜你喜欢
          • 2016-09-16
          • 2014-12-18
          • 2019-02-18
          • 1970-01-01
          • 2022-06-11
          • 2013-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多