我有这样的数值:
long millis = 11400000;
int consta = 86400000;
double res = millis/consta;
问题是:为什么`res`等于`0.0`(而不是约为`0.131944`)?它被存储在`double`类型中,所以不应该有四舍五入的情况,为什么会出现这种情况呢?当您使用二进制运算符时,两个参数应该是相同的类型,结果也将是它们的类型。当您想要除以(int)/(long)
时,它会变成(long)/(long)
,结果是(long)
。要获得double结果,您应该使其变为(double)/(long)
或(int)/(double)
。由于double比int和long更大,因此在(double)/(long)
和(int)/(double)
中,int和long将被转换为double。
因为你正在将一个 long
除以一个 int
,所以你会得到一个 long
的结果。
实际上你在做的是
double res = (double) (millis/consta);
当将millis/consta
强制转换为double
时,其值为0.0
,尝试以下方法将一个双精度浮点数除以一个整数并得到一个双精度浮点数的结果。
double res = (double) millis/consta;
这与之相同。
double res = ((double) millis)/((double) consta));
您正在进行长除法(整数转换为长整型),因此您得到的是长整型值,它们是整数(因此为0)。
您应该这样做:
double res = (double) millis / consta;
一旦其中一个值被转换为double类型,另一个值也会被转换为double类型,因此操作将在两个运算符中使用相同的类型。
millis/consta
是一个整数除法,其结果为 0
。该行中的强制类型转换:
double res = millis/consta;
对结果进行处理:
double res = (double)(millis/consta);
你需要做的是将操作数之一转换:
double res = (double)millis/consta;
在赋值之前,您需要将其转换为双精度浮点型。
请参阅原始类型 这意味着两者都是整数。 由于我们将long除以整数,结果是long 0。 但是您将此值分配给res(double)值并打印它。 因此,结果0.0显示出来了。
long millis = 11400000;
int consta = 86400000;
System.out.println("millis/consta = " + millis/consta); // print 0
double res = millis/consta;
System.out.println("Res " + res); // print 0.0
long millis = 11400000;
int consta = 86400000;
double res = ((double)millis)/((double)consta);
它会起作用的。