我在调试时编写了这行代码:
double hola = (1 / 2) * (double)x.height;
身高是双倍的。 Hola只是一个临时名称。
当我调试时,我看到x.height = 1,而hola = 0。
我做错了什么?我很确定我犯了一些非常简单的错误..
当我删除我对x.height执行的双重转换时,我仍然得到hola = 0.。
答案 0 :(得分:7)
1 / 2
为零,余数为1。零次是零。
你的意思是写1.0 / 2.0
吗?
答案 1 :(得分:4)
1
和2
都是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;