Microsoft标准计算器中使用的变量类型

时间:2013-04-17 01:06:52

标签: c# c++ winforms calculator variable-types

我对编程很新,最近使用C#(winforms)重新制作了微软“标准”计算器,但想问一个关于微软在“标准计算器”中使用的变量类型的问题。

为了确定使用的变量类型,我在微软标准计算器中输入了一个计算:

88888888/9(8月8日)。

结果是:9876543.111111111(小数点后9位)

然后我创建了一个简单的C#控制台应用程序,它将2个数字分开。

我首先使用“int”类型,正如预期的那样,结果是9876543。 然后我使用“双”类型并且非常接近,结果是9876543.11111111(小数点后8位) 我使用了十进制和输出(再次,如预期)有太多的小数位! 我使用了float,输出与int类型(9876543)相同。

float a = 88888888F;
float b = 9F;
float c = 0F;
Console.WriteLine("a / b is: {0}", c = a / b);
Console.ReadLine();

从上面的信息中,我会说微软使用类型“double”,因为它在小数位上最接近。

但是......我不确定我的浮点类型代码中是否有错误。 (你能告诉我上面的代码是不是错了吗?我故意输入casted float to float,以防万一,但最初没有,最后仍然得到相同的结果)

我已尝试过此链接以获取有关浮点类型的一些信息,但实际上没有多大帮助:http://msdn.microsoft.com/en-gb/library/b1e65aza(v=vs.100).aspx

然后我尝试了C ++,得到了类似的结果。

float a = 88888888;
float b = 9;
float c = a / b;
cout <<  c;

double aa = 88888888;
double bb = 9;
double cc = aa / bb;
cout << cc;

如果我错过了一些非常明显的东西,请原谅我!最好的答案是告诉我微软使用哪种变量类型的标准计算器,并提供某种形式的证据来支持它。此外,如果我在上面的代码中出现任何错误,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

double的精度为15-16位。这就是为什么当你使用双倍时,你只有8位小数。 Decimals精确到28-29个有效数字,这就是为什么你得到的小数位数比你想要的多。如果您想匹配Windows计算器并且有9个小数位,您可以使用decimal类型并使用Decimal.Round()将其设置为9位小数。

decimal a = 88888888;
decimal b = 9;
decimal c = 0;
Console.WriteLine("a / b is: {0}", Decimal.Round(c = a / b, 9) );
Console.ReadLine(); 

编辑 -

Windows计算器显示不同程度的准确性的原因是因为它使用了arbitrary-precision arithmetic library。来自Wikipedia

  

在Windows 95及更高版本中,它使用任意精度算术   库,替换标准的IEEE浮点库。它   为基本操作提供bignum精度(加法,减法,   乘法,除法)和高级的32位精度   操作(平方根,超越算子)。

C#编译器不使用相同的任意精度库,这可能解释了结果的差异。

答案 1 :(得分:2)

如果您查看MSDN:http://msdn.microsoft.com/en-us/library/b1e65aza.aspx。你会知道浮点数只有7位精度,在你的情况下是9876543。

答案 2 :(得分:0)