当值为"0.00000"时,Convert.ToInt64失败

Sor*_*ora 1 c#

5我的代码是这样的

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

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

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

lc.*_*lc. 6

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


use*_*740 5

的问题是,“0.00000”是一个字符串,它是一个无效的格式“解析到一个长的” 1

但是,根据数据库实际返回的类型,忽略ToString()转换可能就足够了,因此忽略上述错误。如果数据库返回适当的双精度/浮点数/十进制,那么即使失去精度,以下“将起作用”。

// 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"
Run Code Online (Sandbox Code Playgroud)

如果由于某些无法纠正的原因,数据库返回给定格式的字符串,则首先将字符串转换为双精度/十进制(支持这种格式),然后再转换为长整型就足够了。类似的溢出和精度丢失情况是可能的。

long v = (long)Convert.ToDecimal(dt.Rows[0]["BALANCE"]);
Run Code Online (Sandbox Code Playgroud)

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