在下面的代码中,为什么编译器将结果变量计算为3(整数)但不是3.5(浮点数或双精度数)?
void Main()
{
var result = 7/2;
Console.WriteLine(result);
}
由于
答案 0 :(得分:10)
因为,如果您将一个int
除以另一个int
,则结果为7 / 3
。那是指定here。
当你除以两个整数时,结果总是一个整数。例如,
2
的结果为var
。
然后int
只使用表达式类型来创建double
,因为这就是你想要的(尽管是隐含的)。如果你想要var result = 7.0 / 2;
,你需要强制表达式的类型为double:
int
或者,如果您使用.0
变量,那么您不能只使用int seven = 7;
int two = 2;
var result = (double)seven / two;
:
{{1}}
答案 1 :(得分:6)
因为您正在进行整数除法。
您需要将其中一个值转换为 float / double 以获得预期结果。
试试这个:
void Main()
{
var result = 7/2.0; //convert 7 or 2 to double
Console.WriteLine(result);
}
答案 2 :(得分:1)
/
等运算符也类似于函数。 int/int
的签名是
public static int operator /(int numerator, int denominator)
{
//
}
因此返回值为int
。
答案 3 :(得分:0)
正如其他人所指出的那样,你得到3而不是3.5,因为你正在进行整数除法。大多数答案暗示但未明确说明为什么它是整数除法。它是整数除法,因为两个操作数都是整数。它们都是整数,因为7和2是整数文字。如果向任一文字添加小数点,它将成为双字面,从而导致执行双重除法而不是整数除法。将double除以int或int除以double时使用双除法。