为什么Decimal.Divide(INT,INT)的工作,而不是(INT / INT)?(Why

2019-06-24 03:39发布

怎么会分两个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时间方面,编程明智他们同样简单)时,你希望尽量减少舍入误差(如在科学应用)和首选。



文章来源: Why does Decimal.Divide(int, int) work, but not (int / int)?
标签: c# math int divide