【问题标题】:How can I manage this conversion from string to int?如何管理从字符串到 int 的转换?
【发布时间】:2012-08-22 20:11:36
【问题描述】:

代码:

int TopAttuale = Int32.Parse("1579.998779296875");

它说

System.FormatException:输入字符串的格式不正确。

但这就是我所拥有的。如何将该字符串转换为 INT(所以 1579,我不在乎逗号)?

【问题讨论】:

  • 你没有逗号,而是一个点/小数 . 如果你不关心它,把它从字符串中删除。如果您确实关心小数点后的内容,请将其转换为 float 或 double 并使用 Math.Ciel 将其四舍五入,然后将其转换为 int。

标签: c# .net string int type-conversion


【解决方案1】:

做:

(int) double.Parse(inputstring)

【讨论】:

  • int TopAttuale = (int)double.Parse("1579.998779296875"); Response.Write(TopAttuale); 的结果是 -2147483648?
  • @markzzz 你在说什么? TopAttuale 将保存值 1579。如果您出于其他原因不想使用 parse 方法,可以查看我的答案。
【解决方案2】:

听起来您应该先将其解析为decimal,然后再转换为int。 (我会使用decimal 而不是double,因为您确实得到十进制输入;decimal 将更准确地表示您的源数据。但它不应该有任何区别,通过你施放它的时间。)

// Parse using the invariant culture so that it always uses "." as the
// decimal separator
decimal parsed = decimal.Parse(text, CultureInfo.InvariantCulture);
int value = (int) parsed;

或者,看看是否有小数点,如果有,修剪它后面的所有内容,然后解析结果。

【讨论】:

  • decimal 我得到Value was either too large or too small for an Int32.。加倍我得到-2147483648 结果:S
  • 事实上 double() 返回 1,57999877929688E+15 :O
  • @markzzz:你不应该为你在问题中给出的价值做。也许您没有提供真实的样本数据?请注意在我的示例代码中使用了不变的文化。
【解决方案3】:
decimal.ToInt32(decimal.Parse("1579.998779296875"))

【讨论】:

    【解决方案4】:

    您正在尝试将浮点值转换为整数,这直接是不可能的。 但如果你必须这样做而不是先将字符串转换为双精度然后再将双精度转换为整数。

           string str = "1579.998779296875";
            double val = Convert.ToDouble(str);
            int val1 = Convert.ToInt32(val);
    

    【讨论】:

      【解决方案5】:

      尝试Decimal.Parse方法和cast它到int

      int TopAttuale = (int) Decimal.Parse(inputString)
      

      或者使用Decimal.TryParse方法:

      string value;
      decimal number;
      
      value = "1579.998779296875";
      if (Decimal.TryParse(value, out number))
         int result = (int) number;
      else
         Console.WriteLine("Unable to parse '{0}'.", value);
      

      【讨论】:

        【解决方案6】:

        这只是忽略了小数点后的所有内容。 请注意,这不会让您知道字符串是否根本不是数字。

        public int IntFromString(string str)
        {
            int result = 0;
        
            foreach (char c in str)
            {
                if (!char.IsDigit(c))
                {
                    break;
                }
        
                result = result * 10 + c - '0';
            }
        
            return result;
        }
        

        【讨论】:

          【解决方案7】:

          试试这个代码。

          decimal a= decimal.Parse("1579.998779296875");
          a=Math.Floor(a);
          int b=(int)a;
          Console.WriteLine(b);  
          它显示 1579。根据您的需要。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-26
            • 2012-05-04
            • 1970-01-01
            • 1970-01-01
            • 2020-07-27
            • 2014-01-25
            相关资源
            最近更新 更多