1

C# と mono を使用して Android アプリを作成しています。アクティビティ (Android フォーム) の 1 つから文字列を取得し、それを double に変換する必要があります。これを行うと、非常に奇妙な結果が得られます。たとえば、以下の(未完成の)メソッドの double.parse は次のとおりです。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        try
        {
            //add / edit the task
            if (resultCode == Result.Ok)
            {
                if (m_isAddMode)
                {

                    var tliTemplateControl = new TemplateControlTaskListItem();
                    tliTemplateControl.Code = data.GetStringExtra("selectedtask");
                    tliTemplateControl.Description = data.GetStringExtra("selecteddescription");
                    tliTemplateControl.RequiredQty = double.Parse(data.GetStringExtra("qty"));


                    m_taskList.Items.Add(tliTemplateControl);

                    this.ListAdapter = new TaskListAdapter(this, m_taskList.Items);
                }
                else
                {

                }
            }
        }
        catch (Exception ex)
        {

        }
    }

解析中のテキストが「2」の場合、-1.03054917417467E-05 を返します。これは Visual Studio 2010 で、Android 4.2.3 用の mono を使用しています。誰かアイデアはありますか?ありがとうございました。

4

1 に答える 1

1

もっと細かく分けて。中間結果を変数に格納します。ステートメントごとに 1 つのことを行います。ある計算の結果を別の計算に連鎖させないでください。デバッガを使用してください。すべてのステップで何が起こるかを調べます。

data.GetStringExtra("qty") が実際に返す文字列は何ですか? 「2」と等しいかテストしてみてください。周りに空白がありますか、それとも奇妙な長さですか? (結局、「2」は1文字の長さでなければなりません。)

文字列リテラルで double.Parse("2") を実行するとどうなりますか?

ある時点で、自分のやり方が間違っていることに気付くか、間違いなくコンパイラーまたはライブラリー領域であることに気付くでしょう。ここまできたら、次に何をすればいいのかがわかります。

于 2012-06-21T10:04:33.037 に答える