为什么用int分割int不会给出双倍的?

时间:2015-12-27 22:10:07

标签: c#

我有这段代码:

int num1 = 11*2;
int num2 = 4;
double d = num2 / num1;
Console.WriteLine(d);

为什么结果为0并且没有被转换为double,或者为显式转换丢失提供错误?

5 个答案:

答案 0 :(得分:3)

它是整数除法,在大多数编程语言中都很常见。除以2个整数可以得到最大的整数,而使用模数运算符可以得到余数22 % 4 = 2

如果你想从计算中得到double值,你需要先将一个整数转换为double:

double d = (double)num2/num1;

double d = num2/(double)num1;

另一方面,这不会给你你期望的结果,因为整数除法将首先出现,你将把该值转换为double:

double d = (double)(num2/num1);

网上有很多关于这个主题的资料。几个地方看:

https://en.wikipedia.org/wiki/Division_(mathematics)#Of_integers http://mathworld.wolfram.com/IntegerDivision.html

答案 1 :(得分:2)

整数除法返回整数结果。它的定义与C#语言规范中的定义相同。为什么?因此整数在基本数学运算符(+, - ,*,/)下是closed。另外,如果返回类型不是整数,它应该是什么? C#中有3种内置浮点类型 - floatdoubledecimal

您必须要注意,在C#中,表达式的类型决不会取决于分配结果的变量的类型。因此编译器永远不会检查d的类型是否为double,因此它可以执行浮点除法而不是整数除法。

如果您需要double分区,请至少将其中一个操作数强制转换为double

double d = (double)num2 / num1;

答案 2 :(得分:1)

这并不是那样的。当你除去两个整数时,你会得到一个整数结果,当它试图隐式地将它转换为double时,它就会失败。

你要做的是

{{1}}

将其中至少一个强制转换为double,因此编译器可以理解 这是你想要的分数师。

答案 3 :(得分:0)

当执行整数除法时,在分割两个整数时会截断小数点。你必须明确地转换为double double d = double(num2)/ num1;

答案 4 :(得分:0)

因为C#是一种强类型语言,并且对一个操作的相同类型的操作数通常会产生相同类型的值,除非有一些隐式运算符执行相反的操作。

  

为什么结果为0

因为结果是0,1818181818181818,并且因为操作数是int,所以无法表示结果,因此它会被截断。

如果您想获得double结果,则必须将这些整数明确地转换为double

    int num1 = 11*2;
    int num2 = 4;
    double d = (double)num2 / (double)num1;
    Console.WriteLine(d);