当我乘以双倍时,为什么我得零?

时间:2016-03-02 00:57:39

标签: c#

我在调试时编写了这行代码: double hola = (1 / 2) * (double)x.height; 身高是双倍的。 Hola只是一个临时名称。

当我调试时,我看到x.height = 1,而hola = 0。

我做错了什么?我很确定我犯了一些非常简单的错误..

当我删除我对x.height执行的双重转换时,我仍然得到hola = 0.。

3 个答案:

答案 0 :(得分:7)

1 / 2为零,余数为1。零次是零。

你的意思是写1.0 / 2.0吗?

答案 1 :(得分:4)

12都是int,因此1/2的结果将被转换(截断)为int。 0.5 - > 0

您需要确保其中一个操作数支持小数点:

double hola = (1.0 / 2) * (double)x.height;

或者:

double hola = ((double)1 / 2) * (double)x.height;

答案 2 :(得分:0)

除以两个整数将执行整数除法,它也会以相同的类型给出结果(小数部分被截断)。通过显式地转换至少一个参数,对int参数进行非整数除法(此处为double)一双。所以你的代码将是:

 double hola = (1 / (double)2) * (double)x.height;

OR

double hola = ((double)1 / 2) * (double)x.height;