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