1

我正在尝试创建一个计算器,其中有两个用于数字输入的文本框和最后一个显示数字的文本框。但是,我想让它在没有科学记数法的情况下至少达到 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为 a BigIntegertoo,然后您所需要的就是:

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

无需进行任何其他字符串转换。

于 2013-06-15T07:22:33.720 回答