3

我有一个配置文件,其中包含一些我想用于计算的因素。

public class Config {

  public static final double factor = 67/300; // ~0,2233...

}

我正在访问这样的因素:

public class Calculate {

  public static calc() {
    ...
    result *= Config.factor;
    ...

当我这样做时,Config.factor 等于 0,所以我的结果也是 0。如果我将因子设置为 0.2233,我就不会有这个问题,但这不会那么准确。为什么将其设置为 67/300 不起作用?

4

3 回答 3

9

试试这个:

public static final double factor = 67/300d;

问题是67and300是整数文字,所以除法最终是一个整数,即 0。d数字末尾的 使其成为双文字,所以结果67/300d是 a double

请注意,在前面的代码中,双重文字是300d. 您也可以使用67d/30067d/300d

于 2012-09-11T17:26:39.647 回答
7

它应该如下所示:

 public static final double factor = 67d/300d;

如果您不附加“d”,它将被视为整数,这就是您得到零的原因。

int 将是默认选择。根据文档

对于整数值,此数据类型通常是默认选择,除非有理由(如上述)选择其他类型

于 2012-09-11T17:26:47.917 回答
1

当您输入 67/300 时,编译器会将这些视为int而不是double. 因此,当发生除法时,结果将下限为 0。

为避免这种情况,请通过在每个数字后double添加 a d(如其他答案中所述)或使用(double).

于 2012-09-11T17:29:19.320 回答