微软标准计算器中使用的变量类型
本文关键字:变量 类型 标准 标准计 计算器 微软 | 更新日期: 2023-09-27 18:09:28
我对编程相当陌生,最近用c# (winforms)重新制作了微软的"标准"计算器,但是我想问一个关于微软在他们的"标准计算器"中使用的变量类型的问题。
为了确定所使用的变量类型,我在microsoft标准计算器中输入了一个计算:
88888888/9(八个8).
结果为:9876543.111111111(小数点后9位)
然后我创建了一个简单的c#控制台应用程序,用于除两个数。
我首先使用了"int"类型,正如预期的那样,结果是9876543。然后我使用"double"类型,结果非常接近,结果是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",因为它的小数位数最接近。
但. .我不确定我是否在浮点类型的代码中做错了什么。(你们能让我知道上面的代码是错误的吗?我故意将float类型转换为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;
如果我错过了一些非常明显的东西,请原谅我!最好的答案是告诉我微软在他们的标准计算器中使用了什么变量类型,并给出一些证据来支持它。此外,如果我在上面的代码中犯了任何错误,任何更正都将是感激的。
double类型的精度为15-16位。这就是为什么,当你使用双精度数时,你只能得到8位小数。小数精确到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
。从维基百科。
在Windows 95及以后的版本中,它使用任意精度算法库,取代标准的IEEE浮点库。它为基本运算(加,减,乘法,除法)和高级的32位精度运算符(平方根、超越运算符)。
c#编译器没有使用相同的任意精度库,这可能解释了结果的差异。
如果你看MSDN:http://msdn.microsoft.com/en-us/library/b1e65aza.aspx。你会知道float只有7位精度,在你的例子中,是9876543。
这是你想要的
Decimal.Divide(88888888,9);
此外,任何新开发人员(或任何相关人员)都应该阅读有关浮点算术的内容