怎么会分两个32位的int数为(INT / INT)返回给我0
,但如果我用Decimal.Divide()
我得到正确的答案? 我绝不是C#的家伙。
Answer 1:
int
是整数类型; 除以两个整数执行整数除法,即,小数部分被截断,因为它不能被存储在结果类型(也int
!)。 Decimal
,相比之下,得到了一个小数部分。 通过调用Decimal.Divide
,你int
参数得到隐式转换为Decimal
秒。
您可以执行非整数除法int
通过明确铸造的论点至少一个浮点类型,例如参数:
int a = 42;
int b = 23;
double result = (double)a / b;
Answer 2:
在第一种情况下,你做的整数除法,所以结果被截断(小数部分被砍掉),并返回一个整数。
在第二种情况下,整数转换为小数第一,结果是小数。 因此,他们不会将其截断,你会得到正确的结果。
Answer 3:
下面几行:
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
Answer 4:
我认为Decimal.Divide(decimal, decimal)
隐含其2个INT参数小数,其中作为4/5被视为整数除法,并返回0返回一个十进制值(精确)之前转换
Answer 5:
你想投的数字:
双c =(双)A /(双)B;
注意:如果任何在C#中的参数是双,双分频使用,导致双。 因此,下面将工作太:
双c =(双)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();
}
Answer 6:
如果您正在寻找0 <α<1分的答案,INT / INT是不够的。 INT / INT确实整数除法。 尝试铸造廉政局之一,里面的操作双。
Answer 7:
在我的情况没有上述工作。
我想要做的是575除以278乘以100找到百分比。
double p = (double)((PeopleCount * 1.0 / AllPeopleCount * 1.0) * 100.0);
%:48,3478260869565 - >五百七十五分之二百七十八---> 0%:51,6521739130435 - >五百七十五分之二百九十七---> 0
如果我用1.0乘以PeopleCount它使小数和分裂将是48.34 ...也乘100.0不是100。
Answer 8:
标记为这样的答案很接近,但我认为这是值得补充说,有采用双和小数之间的差异。
我不会做一个更好的工作比解释维基百科的概念,所以我将只提供指针:
浮点运算
小数数据类型
在金融系统中,通常的情况是,我们能保证一定的数量(以10为底)的小数位精度的要求。 这是,如果输入/源数据是在基10通常不可能的,但我们执行在基数为2的运算(因为对于一个数的小数膨胀所需的小数位的数目取决于在底座上;三分之一需要无限多的小数地在碱-10表达为0.333333 ...,但它需要仅一个小数在碱-3:0.1)。
浮点数更快一起工作(在CPU时间方面,编程明智他们同样简单)时,你希望尽量减少舍入误差(如在科学应用)和首选。