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(...),我得到了同样的错误
的问题是,“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; 这在链接的文档中有更详细的讨论。
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |