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 :(得分: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());