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

时间:2013-02-07 00:00:36

标签: java division

double[] arrayName = new double[10]; 
arrayName[0] = (14/49)*100;

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

5 个答案:

答案 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