怎么划分两个32位int数字作为(int/int)返回到我 0, 但是如果我使用 Decimal.Divide() 我得到正确的答案?我不c#家伙。

有帮助吗?

解决方案

int是整数类型;除以两个整数执行整数除法,即小数部分被截断,因为它不能被存储在结果类型(也int!)。 Decimal,相比之下,得到了一个小数部分。通过调用Decimal.Divide,你int论点得到隐式转换为Decimals。

您可以通过显式铸造的参数的至少一个浮点型,e.g执行非整数除法上int参数:

int a = 42;
int b = 23;
double result = (double)a / b;

其他提示

在第一种情况下,你正在做的整数除法,所以结果被截去(小数部分被切掉),并返回一个整数。

在第二种情况下,整数转换为小数第一,结果是小数。因此,他们不会将其截断,你会得到正确的结果。

在下面的行:

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

我想Decimal.Divide(decimal, decimal)隐含其中作为4/5被视为整数除法,并返回返回一个十进制值(精确)之前其2个INT参数小数转换0

你想要投的数字:

双c=(double)a/(double)b;

注:如果任何论点在C#是一个双人间,双鸿沟使用其结果在一倍。因此,以下工作:

双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 <α<1分的答案,INT / INT是不够的。 INT / INT确实整数除法。尝试铸造整型的中的一个来操作内部的双

在我的情况下没有什么上述工作。

我想要做的是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。

标记为这样的答案很接近,但我认为这是值得补充说,有采用双和小数之间的差异。

我不会做一个更好的工作比解释维基百科的概念,所以我将只提供指针:

浮点算术

十进制数据类型

在金融系统,通常的情况是,我们可以保证一定的数量(以10为底)的小数位精确度的要求。这是,如果输入/源数据是在基10通常不可能的,但我们执行在基数为2的运算(因为对于一个数的小数膨胀所需的小数位的数目取决于在底座上;三分之一需要无限多的小数地在碱-10表达为0.333333 ...,但它需要仅一个小数在碱-3:0.1)。

浮点数更快一起工作(在CPU时间范围;编程明智它们同样简单),每当你希望尽量减少舍入误差(如在科学应用)优选的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top