【问题标题】:Add two values-input string was not in a correct format添加两个值 - 输入字符串的格式不正确
【发布时间】:2015-01-14 14:00:00
【问题描述】:

我从数据阅读器中读取数据并想为其添加一些价值。它给了我错误

输入字符串的格式不正确

这是我的代码

int OldAmount = 0;
while (dr.Read())
{
   OldAmount = dr.GetInt32(0);
}
string CurrentAmount = (Convert.ToInt32(amnt) + Convert.ToInt32(OldAmount)).ToString();

其中amnt 是string 并具有23000 值。

有什么问题吗?

【问题讨论】:

  • 这不是一个整数。整数没有小数位。
  • oldAmount 已经是 int 类型。
  • @Rawling 你确定这是好的副本吗?因为重复解析 string 到 double 但是这个问题解析 string 到 int :\
  • @SonerGönül 好点,我将其读作“组分隔符被视为小数分隔符”,但很可能是“尝试将浮点值解析为 int”...
  • @Rawling 是的,我也很困惑 :)

标签: c# string int


【解决方案1】:

Convert.ToInt32 method 使用您当前的文化设置。

看起来您的CurrentCulture 的NumberDecimalSeparator property 不是. 或/并且由于Convert.ToInt32 默认使用NumberStyles.Integer,您还需要NumberStyles.AllowDecimalPoint 来指向您的小数分隔符。

您可以使用Int32.Parse(String, NumberStyles, IFormatProvider) overload 代替提供赞;

int amnt = Int32.Parse("23000.00",
                       NumberStyles.Integer | NumberStyles.AllowDecimalPoint, 
                       CultureInfo.InvariantCulture); //23000

然后你可以像这样使用这个值;

string CurrentAmount = (amnt + OldAmount).ToString();

顺便说一句,由于您的字符串没有任何尾随或前导空格或前导符号,因此在您的情况下使用 NumberStyles.Integer 是不必要的。你可以这样做;

int amnt = Int32.Parse("23000.00",
                       NumberStyles.AllowDecimalPoint, 
                       CultureInfo.InvariantCulture); //23000

【讨论】:

    【解决方案2】:

    您正在转换为 int,而您有十进制。 将convert.ToInt32(amnt) 更改为convert.ToDecimal(amnt)

    【讨论】:

      【解决方案3】:

      OldAmount 已经是 int 了,不需要再转换了。试试:

      string CurrentAmount = (int.Parse("23000.00", NumberStyles.AllowDecimalPoint) + OldAmount).ToString();
      

      或者只使用小数。

      【讨论】:

        【解决方案4】:

        Convert.ToInt 取决于您的计算机 CurrentCulture。
        如果您的小数分隔符不是 .,您可以获得该异常。

        您可以使用Int.Parse 指定字符串格式,例如Int32.Parse("23000.00", NumberStyles.AllowDecimalPoint);。

        但你确定应该是int 而不是decimal?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2013-08-22
          相关资源
          最近更新 更多