【问题标题】:String to int formatexception字符串到 int 格式异常
【发布时间】:2013-10-23 19:46:05
【问题描述】:

在 php 中我可以这样做:

if (balance == 0 && !neverBought)

其中 balance 来自 API,是一个字符串。

在 C# 中,我尝试将 balance 转换为 int,如下所示:

if (int.Parse(balance) == 0 && !(neverBought))

但我得到异常详细信息:System.FormatException:输入字符串格式不正确。

我做错了什么?

【问题讨论】:

  • 发布balance的值。
  • 试试TryToParse方法
  • 在 PHP 中,任何以数字为前缀的字符串在所有实际用途中都被视为数字。在 C# 中,Parse 仅适用于仅包含数字字符的字符串。
  • 你确定 balance 的内容是整数吗?像 balance 这样的名字让我觉得它可能是一个小数
  • 当然,如果你依赖@zneak 提到的行为,而不是将这样的字符串视为无效数字,你应该真的修复它。跨度>

标签: c# .net


【解决方案1】:

如果您不确定字符串是否有效,请使用TryParse 等方法尝试解析它而不抛出异常:

基于 cmets 你也没有整数,你有一个十进制值,所以你也应该把它解析为一个。

decimal decimalBalance;
if(decimal .TryParse(balance, out decimalBalance) 
    && decimalBalance == 0m && !neverBought)

【讨论】:

  • @Servy 建议的方法是绝对正确的。如果您不确定您的输入,您应该使用 TryParse。但是,我怀疑您的输入字符串不是数字,因为来自 PHP,您可能正在传递一些值,例如“$1,999.99”或类似的值,其中 '$' 或 ',' 导致问题。我认为您需要一个“RemoveNonNumeric(this string s)”扩展方法。此处讨论了使用正则表达式的基本方法:stackoverflow.com/questions/3055742/…
  • @Eric 您可以简单地基于其中一种常见格式为TryParse 的第三个参数提供适当的格式化程序,而不是使用通常相当脆弱且难以确保正确性的正则表达式.
  • @Servy - 我不知道这一点,所以你让我很好奇。我提供了该重载的文档/示例的链接,作为其他任何想要简单查看的人的快速参考。 MSDN:msdn.microsoft.com/EN-US/library/ew0seb73.aspx。我注意到的一件很酷的事情是,它还包含一个 NumberStyles 标志参数,该参数可以允许货币字符而无需剥离它们。光滑!感谢您指出了这一点。您对正则表达式也是正确的。非常有文化特色。例如,在某些文化中,1.345,978 应解析为十进制 1345.978。
【解决方案2】:

如果您确定 balance 不是字符串,Convert.ToInt32() 可能也会有所帮助

            string a = "3";
            int b = 3;
            if (Convert.ToInt32(a) == b)
            {
                //do smth
            }

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2020-02-04
    • 2013-09-25
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多