前几天我在测验中遇到了以下问题。
考虑代码片段(假定位于合法定义了所有变量的程序中):
int num1, num2; double answer; // program gets num1 and num2 from user, and values received // are always non-zero ints between -100 and +100 (code not shown) ... // compute precise quotient: answer = (double) ( num1 / num2 );
赋值语句后的变量答案将保持最精确的商,精确到小数点右边的几位数...
因此,选择为always
,never
和sometimes
。由于括号在这种情况下的工作原理,我选择了never
,但是我的老师说的是sometimes
。我有点迷茫,所以我希望有人能解释一下。
答案 0 :(得分:5)
由于(num1 / num2)
被加上括号,并且num1
和num2
都是整数,因此将导致整数除法,从而丢弃小数部分。如果表达式为(double) num1 / num2
,则num1
将被强制转换为双精度优先,并且结果将始终精确到多个小数点。
一个结果准确的示例:(double) (4 / 2)
与(double) (2)
相同
一个结果不准确的示例:(double) (3 / 2)
与(double) (1)
相同