我有一个配置文件,其中包含一些我想用于计算的因素。
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工作?
答案 0 :(得分:9)
试试这个:
public static final double factor = 67/300d;
问题是67
和300
是整数文字,因此除法最终是一个整数,即0。数字末尾的d
使其成为double literal,因此67/300d
的结果是double
。
请注意,在前面的代码中,双字面是300d
。您还可以使用67d/300
或67d/300d
。
答案 1 :(得分:7)
应该如下所示:
public static final double factor = 67d/300d;
如果你不附加'd',它将被视为整数,这就是你获得ZERO的原因。
int将是deafault选择。作为per doc
对于整数值,除非有理由(如上所述)选择其他内容,否则此数据类型通常是默认选择
答案 2 :(得分:1)
当您输入67/300时,编译器会将其视为int
而不是double
。因此,当发生除法时,结果将被置为0。
要避免这种情况,请将数字转换为double
,方法是在每个数字后添加d
(如其他答案中所述)或使用(double)
添加完整类型。