c#infinite显示所有数字的计算器

时间:2013-06-15 07:21:10

标签: c#

我正在尝试创建一个计算器,其中有两个用于数字输入的文本框,最后一个用于显示数字。但是,我想这样做,它将至少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);**

1 个答案:

答案 0 :(得分: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;

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