double[] arrayName = new double[10];
arrayName[0] = (14/49)*100;
尝试获取两个数字 14 / 49 的百分比,并将结果添加到数组中。它返回的只是 0.0。如果我使用浮点数而不是双精度数,同样的事情。Java新手。
要么将int
s 转换为double
,要么只使用double
s。
例如:
double[] arrayName = new double[10];
resultValue[0] = (14.0/49.0)*100;
或者:
double[] arrayName = new double[10];
resultValue[0] = ((double)14/49)*100;
你怎么看:
(double/double)*double
JVM 如何看待它
(int/int)*int
来自JLS。int 到 double 是一个扩大的转换。从§5.1.2 开始:
扩大原始转换不会丢失有关数值整体大小的信息。
[...]
将 int 或 long 值转换为 float,或将 long 值转换为 double,可能会导致精度损失——也就是说,结果可能会丢失一些值的最低有效位。在这种情况下,生成的浮点值将是整数值的正确舍入版本,使用 IEEE 754 舍入到最近模式(§4.2.4)。
如果您用双文字替换其中一个(例如添加.0
或强制转换其中一个,double
您应该得到您期望的结果。
像这样:
arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers
或这个:
arrayName[0] = (double)(14/49)*100;
您的值中至少有一个应该是double
:
double[] arrayName = new double[10];
arrayName[0] = (14d/49d)*100;
// or...
// arrayName[0] = (14d/49)*100;
// or...
// arrayName[0] = (14/49d)*100;
// or...
// arrayName[0] = (14.0/49)*100;
// or...
// arrayName[0] = (14/49.0)*100;
// or...
// arrayName[0] = (14/(double)49)*100;
// or...
// arrayName[0] = ((double)14/49)*100;
// or...
// arrayName[0] = ((double)14/(double)49)*100;
正如许多其他人指出的那样,您只需将常量设置为双精度数:
arrayName[0] = (14*100)/49.0;
这样,您只需将最后一个计算转换为 double 而不是开始,并减少浮点计算的数量。
顺便说一句,如果您愿意,您也可以使用相同的交换顺序的方法将结果作为整数,并在除法之前使用乘法,例如:14*100/49 而不是 (14/49)*100。