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

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

4

5 回答 5

17

要么将ints 转换为double,要么只使用doubles。

例如:

double[] arrayName = new double[10]; 
resultValue[0] = (14.0/49.0)*100;

或者:

double[] arrayName = new double[10]; 
resultValue[0] = ((double)14/49)*100;
于 2013-02-07T00:04:03.840 回答
10

你怎么看:

(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您应该得到您期望的结果。

于 2013-02-07T00:03:01.540 回答
3

像这样:

arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers

或这个:

arrayName[0] = (double)(14/49)*100;
于 2013-02-07T00:02:50.470 回答
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;
于 2013-02-07T00:04:38.610 回答
2

正如许多其他人指出的那样,您只需将常量设置为双精度数:

arrayName[0] = (14*100)/49.0;

这样,您只需将最后一个计算转换为 double 而不是开始,并减少浮点计算的数量。

顺便说一句,如果您愿意,您也可以使用相同的交换顺序的方法将结果作为整数,并在除法之前使用乘法,例如:14*100/49 而不是 (14/49)*100。

于 2013-02-07T00:08:04.540 回答