long/int除法中出现意外结果

ale*_*lex 15 java double int division

我有这样的价值观:

long millis = 11400000;
int consta = 86400000;
double res = millis/consta;
Run Code Online (Sandbox Code Playgroud)

问题是:为什么res等于0.0(而不是ca. 0.131944)?存储在double那里应该没有向右舍入?

小智 26

当您使用二元运算符时,两个参数应该是相同的类型,结果也将是它们的类型.当你想要分成(int)/(long)它时(long)/(long),结果是(long).你应该做它(double)/(long)(int)/(double)获得双重结果.由于double大于int和long,因此int和long将变为double (double)/(long)(int)/(double)


Pet*_*rey 19

因为你是分割longint你得到的long结果.你实际做的是

double res = (double) (millis/consta);
Run Code Online (Sandbox Code Playgroud)

millis/constaIS 0,投的时候double0.0

尝试以下操作将double除以int并获得double结果.

double res = (double) millis/consta;
Run Code Online (Sandbox Code Playgroud)

这是一样的

double res = ((double) millis)/((double) consta));
Run Code Online (Sandbox Code Playgroud)