如何在Java中分解为小数而不是零?

bat*_*ell 7 java division

double[] arrayName = new double[10]; 
arrayName[0] = (14/49)*100;
Run Code Online (Sandbox Code Playgroud)

试图获得两个数字的百分比,14/49,并将结果添加到数组中.它返回的全部是0.0.如果我使用float而不是double,同样的事情.Java新手.

Jas*_*ray 11

无论是将ints转换为s double,还是仅使用doubles.

例如:

double[] arrayName = new double[10]; 
resultValue[0] = (14.0/49.0)*100;
Run Code Online (Sandbox Code Playgroud)

要么:

double[] arrayName = new double[10]; 
resultValue[0] = ((double)14/49)*100;
Run Code Online (Sandbox Code Playgroud)


Jas*_*ske 6

你怎么看:

(double/double)*double
Run Code Online (Sandbox Code Playgroud)

JVM如何看待它

(int/int)*int
Run Code Online (Sandbox Code Playgroud)

来自JLS.int to double是一个扩大的转换.从§5.1.2开始:

扩展原始转换不会丢失有关数值总体大小的信息.

[...]

将int或long值转换为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位.在这种情况下,使用IEEE 754舍入到最接近模式(第4.2.4节)生成的浮点值将是整数值的正确舍入版本.

如果你用双文字替换其中一个(比如添加.0或投射其中一个,double你应该得到你期望的结果).