17

文字列パラメーターを受け取り、それらを整数に変換する関数があります。
安全な変換のために int.TryParse() が使用されます。

public IEnumerable<object> ReportView(string param1, string param2)
{
  int storeId = int.TryParse(param1, out storeId) ? storeId : 0;
  int titleId = int.TryParse(param2, out titleId) ? titleId : 0;
  IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
  return detailView;
}

関数呼び出し ReportView("2","4")--> int.Tryparse で数値の解析に成功
関数呼び出し ReportView("2.00","4.00") --> int.TryParse で数値の解析に失敗

なんで?何か案が?

@更新
申し訳ありませんが、私の概念は間違っていました。私はC#を初めて使用します.Int.TryParse()は整数部分を返し、小数を無視すると思いました。しかし、Convert.ToInt32("string") でもそうはなりません

4

9 に答える 9

7
public IEnumerable<object> ReportView(string param1, string param2)
{
  decimal tmp;
  int storeId = decimal.TryParse(param1, out tmp) ? (int)tmp : 0;
  int titleId = decimal.TryParse(param2, out tmp) ? (int)tmp : 0;
  IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
  return detailView;
}

The above will work with Integer or Decimal strings. Mind you that strings of the form "2.123" will result in the Integer value of 2 being returned.

于 2012-04-04T14:41:29.817 に答える
7

int.TryParse は、念のために文字列を解析して整数に変換しようとしません。10 進数の文字列には decimal.TryParse を使用する必要があります。

于 2012-04-04T14:25:58.143 に答える
4

2.00 と 4.00 は整数ではありません。これらは、たまたま小数点の後に 0 がある 10 進数値です。小数を解析する場合は、decimal.TryParse() または double.TryParse() を使用してから、小数点以下を切り捨てるか、ゼロ値の仮数部をチェックします。

于 2012-04-04T14:26:58.117 に答える
4

コンピュータにとって、「2.00」は整数ではなく浮動小数点/10 進数です。decimal.TryParse() を実行する代わりに、末尾のゼロを削除して文字列を前処理してから、int.TryParse() を実行できます。したがって、「2.00」がある場合は、「。」に到達するまで、文字列の最後の文字をチェック (およびドロップ) し続けます。(10 進数)。「0」または「.」の場合 あなたはそれを落とすことができます。最終的には「2」だけになります。

于 2012-04-04T15:36:18.087 に答える
3

2.00 と 4.00 は整数データ型ではありません。これが理由です。それらを真にしたい場合は、 double.TryParse() または decimal.TryParse() を試してください

于 2012-04-04T14:26:17.327 に答える
2

10 進数は整数ではないため、解析に失敗します。

于 2012-04-04T14:26:18.807 に答える
2

2.00 は 10 進数であり、コンピューターの目には int ではありません。

于 2012-04-04T14:26:40.087 に答える
2

Int32 (int) には整数値のみを含めることができます。したがって、Int32 の Parse/TryParse 関数は、10 進数を含む文字列を解析できません。文字列値に小数が含まれている可能性があるが、整数を表すことを意図している場合は、Decimal.TryParse を使用してからキャストします。

于 2012-04-04T14:27:32.863 に答える
1

「2.00」は整数ではなく小数だからです。

于 2012-04-04T14:26:31.943 に答える