double[] arrayName = new double[10];
arrayName[0] = (14/49)*100;
尝试获取两个数字的百分比,14/49,并将结果添加到数组中。它返回的全部是0.0。如果我使用float而不是double,同样的事情。 Java新手。
答案 0 :(得分:10)
将int
转换为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;
答案 1 :(得分:5)
你怎么看:
(double/double)*double
JVM如何看待它
(int/int)*int
来自JLS。 int to double是一个扩大的转换。来自§5.1.2:
扩展原始转换不会 丢失有关整体的信息 数值的大小。
[...]
转换int或long值 浮动,或长期价值 加倍,可能导致损失 精度 - 也就是说,结果可能会丢失 一些最不重要的部分 价值。在这种情况下,由此产生 浮点值将是一个 正确的圆形版本 整数值,使用IEEE 754 舍入到最近的模式(§4.2.4)。
如果您使用双重文字替换其中一个(例如添加.0
或将其中一个投放到double
,您应该得到您期望的结果。
答案 2 :(得分:3)
像这样:
arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers
或者这个:
arrayName[0] = (double)(14/49)*100;
答案 3 :(得分:3)
至少有一个值应为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;
答案 4 :(得分:2)
正如许多其他人指出的那样,你只需将常量设置为双精度:
arrayName[0] = (14*100)/49.0;
这样,您只将最后一次计算转换为double而不是开头,并减少浮点计算次数。
顺便说一句,如果您愿意,您也可以使用相同的交换顺序的方法将结果作为整数,并在除法前使用乘法,例如:14 * 100/49而不是(14/49)* 100