我认为它在代码中非常自我解释。 显然,我不是一遍又一遍地评估同样的事情,它只是解释我的问题的示例数字。 我猜测它的上溢/下溢但我不知道如何处理它。
double d = (1 / (684985+157781));
System.out.println(d); // returns 0.0
System.out.println(Math.log(d)); // returns -Infinity.
(1 / (684985+157781))
是一个整数表达式,因此它将变为0
。 然后将零分配给double d
,为0.0
。
尝试将1
更改为1.0
以强制该表达式为浮点数,或者将1.0D
强制为加倍。
另一个人通过整数除法完成:
double d = (1.0 / (684985.0+157781.0));
不,在Java中,如果使用整数,除法的结果将再次为整数,您必须将至少一个操作数转换为double。
double d = (1 / (double)(684985+157781));
尝试使用double d = (1.0 / (684985+157781));
注意1.0
部分:你想强制进行双重评估。
第一个表达式以整数运算计算。 要获得您期望的答案,您需要在浮点运算中计算它,因此:
double d = (1.0 / (684985.0+157781.0));