5

我想解析一个要浮动的字符串。当字符串为空时,它将传递 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)

请提出处理这种情况的最佳方法。

4

6 回答 6

9

如果drInvetory["MSRP"]来自 a DataRow,则与 相比,null 合并运算符将不会计算为 true DBNull,因此浮点解析将失败。您可以比较DBNull.Value,或使用float.TryParse()

从原始代码

aeVehicle.MSRP = float.Parse(drInvetory["MSRP"] == DBNull.Value ? "0" : drInvetory["MSRP"].ToString());

就个人而言,我会检查DBNull然后转换为浮点数(或取消框到确切的类型,然后转换)。这节省了相对昂贵的字符串解析。

更好的

aeVehicle.MSRP = drInvetory["MSRP"] == DBNull.Value ? default( float ) : 
(float)drInvetory["MSRP"];

SQL-CLR 类型映射: http: //msdn.microsoft.com/en-us/library/bb386947.aspx
另请参阅:.NET 中十进制、浮点和双精度的区别?

于 2012-09-20T07:02:24.493 回答
0
float f = 0f;
string s = (drInvetory["MSRP"] ?? "0").ToString();
if (s != null) {
    f = float.Parse(s, ...
}
于 2012-09-20T07:01:55.823 回答
0

你应该使用 TryParse :

    float num = 0;
    float.TryParse(s, out num);
于 2012-09-20T07:04:22.733 回答
0

它可能是由字符串中的意外逗号引起的。尝试先扔掉逗号。

于 2012-09-20T07:06:03.650 回答
0
float result = 0;
float.TryParse(drInvetory["MSRP"], out result);
aeVehicle.MSRP = result;

这样,如果解析失败,那么它将始终回退到 0。

于 2012-09-20T07:07:53.700 回答
0

另一个简单的替代方案是:

aeVehicle.MSRP = float.Parse("0" + drInvetory["MSRP"].ToString());

它仅适用于正数。否则使用最方便的 Microsoft.VisualBasic.Val 函数。

于 2016-01-22T17:46:54.897 回答