5

文字列を解析してフロートさせたい。また、文字列が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)

この状況に対処するための最良の方法を提案してください。

4

6 に答える 6

9

drInvetory["MSRP"]からのものである場合DataRow、null合体演算子はと比較したときにtrueと評価されないDBNullため、float解析は失敗します。を比較する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のdecimal、float、doubleの違いは?

于 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 に答える