0

これは私のコードです -

private void button1_Click(object sender, EventArgs e)
    {

        double number =Convert.ToDouble( textBox1.Text);
        string s = (Math.Round(number, 3)*1000).ToString();

        int norm=1;
        for(int i=0;i<=s.Length-1;i++)
        {
            norm*=10;
        }
        label1.Text =Math.Round((Convert.ToDouble(s)/norm),3).ToString() ;

    }

これにより、実際には 21234,34532 から 2,123、または 75898331 から 7,589 (理論上) などの数値が得られるはずです。75898331 を試してみると、(24.328) という予期しない結果が得られました。誰かが私が台無しにした場所を教えてもらえますか? このような大きな数を処理するには、Double では十分ではありません。

4

1 に答える 1

0

いいえ、そうではありませんでした。同じようにしてみたところ、

double number = Convert.ToDouble("75898331");
string s = (Math.Round(number, 3) * 1000).ToString();

「75898331000」として s を与えたので、オーバーフローする int (32 ビット) を作成しようとしています。norm代わりに Int64 を作成してみてください。

于 2012-04-18T10:49:15.780 に答える