如何将两个32位int数相除为(int / int)返回给我0
,但是如果使用,Decimal.Divide()
我会得到正确的答案?我绝不是个熟人。
如何将两个32位int数相除为(int / int)返回给我0
,但是如果使用,Decimal.Divide()
我会得到正确的答案?我绝不是个熟人。
Answers:
下一行:
int a = 1, b = 2;
object result = a / b;
...将使用整数算术执行。Decimal.Divide
另一方面,需要使用类型的两个参数Decimal
,因此将对十进制值而不是整数值进行除法。这等效于:
int a = 1, b = 2;
object result = (Decimal)a / (Decimal)b;
要对此进行检查,可以在上述每个示例之后添加以下代码行:
Console.WriteLine(result.ToString());
Console.WriteLine(result.GetType().ToString());
在第一种情况下的输出将是
0
System.Int32
..在第二种情况下:
0,5
System.Decimal
您要转换数字:
双c =(双)a /(双)b;
注意:如果C#中的任何参数都是双精度,则使用双精度除法将导致双精度。因此,以下内容也可以工作:
double c =(double)a / b;
这是一个小程序:
static void Main(string[] args)
{
int a=0, b = 0, c = 0;
int n = Convert.ToInt16(Console.ReadLine());
string[] arr_temp = Console.ReadLine().Split(' ');
int[] arr = Array.ConvertAll(arr_temp, Int32.Parse);
foreach (int i in arr)
{
if (i > 0) a++;
else if (i < 0) b++;
else c++;
}
Console.WriteLine("{0}", (double)a / n);
Console.WriteLine("{0}", (double)b / n);
Console.WriteLine("{0}", (double)c / n);
Console.ReadKey();
}
如果您正在寻找0 <a <1的答案,则int / int将无法满足要求。int / int进行整数除法。尝试在操作内部将一个int转换为double。
如此标记的答案就在那儿,但是我认为值得补充的是,使用双精度和十进制之间是有区别的。
与Wikipedia相比,我在解释概念方面做得更好,因此我只提供以下指示信息:
在金融系统中,通常要求我们可以保证一定数量(以10为基数)的小数位精度。如果输入/源数据以10为底,但是我们以2为底(因为数字的十进制扩展所需的小数位数取决于基数;三分之一需要无限多个小数),通常这是不可能的以10为基数的地方表示为0.333333 ...,但以3为基数只需要一个小数:0.1)。
浮点数的处理速度更快(就CPU时间而言;就编程而言,它们也同样简单),并且在希望最大程度地舍入误差时(例如在科学应用中),首选浮点数。