转换.当值为"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"是一个字符串,这是一个无效格式用于"解析为长"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