我想解析一个字符串浮动。当字符串为null时,它将传递0(作为浮动值)。
我正在做这样的解析:
aeVehicle.MSRP = float.Parse((drInvetory["MSRP"] ?? "0").ToString());
哪个错误:
ERROR MESSAGE : Input string was not in a correct format.
ERROR SOURCE : at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info)
at System.Single.Parse(String s)
请建议处理这种情况的最佳方法。
答案 0 :(得分:8)
如果drInvetory["MSRP"]
来自DataRow
,则与DBNull
相比,空合并运算符将不会计算为true,因此浮点解析将失败。您可以比较DBNull.Value
,或使用float.TryParse()
。
来自原始代码
aeVehicle.MSRP = float.Parse(drInvetory["MSRP"] == DBNull.Value ? "0" : drInvetory["MSRP"].ToString());
就个人而言,我会检查DBNull
,然后转换为浮点数(或者unbox到精确类型,然后转换)。这节省了相对昂贵的字符串解析。
更好
aeVehicle.MSRP = drInvetory["MSRP"] == DBNull.Value ? default( float ) :
(float)drInvetory["MSRP"];
SQL-CLR类型映射:http://msdn.microsoft.com/en-us/library/bb386947.aspx
另见:Difference between decimal, float and double in .NET?
答案 1 :(得分:0)
float f = 0f;
string s = (drInvetory["MSRP"] ?? "0").ToString();
if (s != null) {
f = float.Parse(s, ...
}
答案 2 :(得分:0)
你应该使用TryParse:
float num = 0;
float.TryParse(s, out num);
答案 3 :(得分:0)
它可能是由字符串中的意外逗号引起的。试着先丢掉逗号。
答案 4 :(得分:0)
float result = 0;
float.TryParse(drInvetory["MSRP"], out result);
aeVehicle.MSRP = result;
这样,如果解析失败,那么它总是会回落到0。
答案 5 :(得分:0)
另一个简单的替代方案是:
$_user_data_email
它仅适用于正数。 否则使用Microsoft.VisualBasic.Val函数,这是最方便的函数。