1

数値入力用の 2 つのテキスト ボックスと、数値を表示する最後のテキスト ボックスがある電卓を作成しようとしています。ただし、科学表記なしで少なくとも80桁になるようにしたい(小数点は関係ありません)。これをどのように実装するかについて誰か提案がありますか?

ありがとうございました。

public void button1_Click(object sender, EventArgs e)
    {

        //Addition 
        **resultAdd = Convert.ToDouble(tb1.Text) ;**

        tb2.Enabled = true;
        calcFunc = "Add";


     }



    private void btnSubtract_Click(object sender, EventArgs e)
    {
        //subtract
        resultSubtract = Convert.ToDouble(tb1.Text) + 0;
        tb2.Enabled = true;
        calcFunc = "Subtract";
    }

    public void btnEqual_Click(object sender, EventArgs e)
    {

        double totalResult;


        switch (calcFunc)
        {
            case "Add":
                   totalResult = Convert.ToDouble(tb2.Text) + resultAdd;
                   total = tbTotal.Text.ToCharArray();
                   string x = Convert.ToString(totalResult);
                   tbTotal.Text = x;

                //   tbTotal.Text = x;
                   tbTotal.Enabled = true;

                   **totvalue = BigInteger.Parse(x);**
4

1 に答える 1

12

「小数は問題にならない」ということで、整数のみを扱っていることを意味し、.NET 4 以上を使用していると想定している場合はSystem.Numerics.BigInteger、任意の大きな整数を許可するものを使用する必要があります。

(まだすべての GUI 作業を行う必要がありますがBigInteger、すべての計算に使用できます。)

が大きな数を完全に処理できることを示す短いが完全な例BigInteger:

using System;
using System.Numerics;

class Test
{
    static void Main()
    {
        string text = new string('1', 80);
        BigInteger number = BigInteger.Parse(text);
        Console.WriteLine(number);
    }
}

編集:さて、コードを投稿したので、何が問題なのかは明らかです-doubleこのコードでは理由もなく通過しています:

totalResult = Convert.ToDouble(tb2.Text) + resultAdd;
total = tbTotal.Text.ToCharArray();
string x = Convert.ToString(totalResult);
tbTotal.Text = x;
totvalue = BigInteger.Parse(x);

double値を処理しようとしているのではありません-整数を処理しようとしているので、すべてをBigInteger. あまりにも変更resultAddすると、BigInteger必要なのは次のとおりです。

BigInteger result = BigInteger.Parse(tb2.Text) + resultAdd;

他の文字列変換を行う必要はありません。

于 2013-06-15T07:22:33.720 に答える