转换.当值为"0.00000"时,ToInt64失败

本文关键字:quot ToInt64 失败 00000 转换 | 更新日期: 2023-09-27 17:50:09

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(...),我得到了相同的错误

转换.当值为"0.00000"时,ToInt64失败

问题是"0.00000"是一个字符串,这是一个无效格式用于"解析为长"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"

如果由于某些不可纠正的原因,数据库返回给定格式的String,则应该首先将字符串转换为双精度/十进制(确实支持这种格式),然后将转换为长格式。可能出现类似的溢出和精度损失情况。

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

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

0.00000不是Int64的有效值。也许您打算使用Decimal(它看起来像一个货币金额)或以其他方式截断/四舍五入值?

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