当值为“0.00000”时,Convert.ToInt64失败

时间:2014-03-14 07:44:42

标签: c#

5我的代码就像这样

protected long Getvalue()
{
   DataTable dt = GetDataBaseValue();
     if (dt.Rows.Count > 0)
     {
      return Convert.ToInt64(dt.Rows[0]["BALANCE"].ToString());
     }
    return 0;
}

dt.Rows[0]["BALANCE"].ToString()=0.00000我在这里收到错误

PS:我试图这样做return long.Parse(...)我得到了同样的错误

4 个答案:

答案 0 :(得分:6)

0.00000不是Int64的有效值。也许您打算使用Decimal(看起来像货币金额)或者首先截断/舍入值?

答案 1 :(得分:4)

问题是“0.00000”是 String ,这是"parsing to a long" 1 无效格式

但是,省略 ToString()转换可能就足够了,因而上述错误可能就足够了,具体取决于数据库实际返回的类型。如果数据库返回一个合适的double / float / decimal,那么下面的“Will Work”,即使失去精度。

// Source is a double
Convert.ToInt64(0.0d)             // -> 0
Convert.ToInt64(0.5d)             // -> 0 (half-even rounding)
Convert.ToInt64(1.5d)             // -> 2 (half-even rounding)
Convert.ToInt64(double.MaxValue)  // -> OverflowException

// Source is a string
Convert.ToInt64("0")    // -> 0
Convert.ToInt64("0.0")  // -> FormatException: "not in a correct format"

如果由于某些不可纠正的原因,数据库返回给定格式的字符串,那么首先将字符串转换为double / decimal(支持这种格式)和然后就足够了很久了。类似的溢出和精度损失也是可能的。

long v = (long)Convert.ToDecimal(dt.Rows[0]["BALANCE"]);

默认情况下,当.NET符合模式\s*[-+]?\d+\s*时,.NET将从字符串解析整数值(例如int,long),否则将抛出FormatException;这在链接文档中有更详细的讨论。

答案 2 :(得分:1)

使用Decimal.Parse("0.0000");这用于非长货币或Int64

答案 3 :(得分:-1)

使用CInt代替Convert.ToInt64。

return CInt(dt.Rows[0]["BALANCE"].ToString());