为什么 (360 / 24) / 60 = 0 ...在爪哇

2022-09-03 16:30:20

我试图计算(360 / 24) / 60当我应该得到0.25时,我一直得到答案0.0

换句话说:我想将360除以24,然后将结果除以60

public class Divide {

    public static void main(String[] args){
      float div = ((360 / 24) / 60);
      System.out.println(div);

    }
}

这将打印出来:

0.0

为什么?我做了什么非常愚蠢的事情,还是有充分的理由这样做


答案 1

算术中没有一个操作数是浮点数 - 所以这一切都是用整数算术完成的,然后转换为浮点数。如果将相应操作数的类型更改为浮点型,则它可以正常工作:

float div = ((360 / 24f) / 60); // div is now 0.25

请注意,如果您仅将60更改为浮点数,则最终将360 / 24作为整数算术执行 - 这在这种特殊情况下很好,但并不代表我怀疑您真正想要的。基本上,您需要确保以您想要的方式执行算术运算。


答案 2

您实际上是在进行整数除法(JLS 15.17.2)。

float div = ((360 / 24) / 60);
float div = (float) ((360 / 24) / 60);
float div = (float) (15 / 60);
float div = (float) (0);
float div = 0F;

若要执行浮点除法,至少一个操作数必须是浮点数值类型。

float div = ((360F / 24) / 60);
float div = 15F / 60;
float div = 0.25F;

提示: 如果精度很重要,则在转换为 之前,您希望使用 进行尽可能多的计算。实际上,除非您的分析证明您绝对需要 ,否则您应该始终首选 。doublefloatfloatdouble

    float f;

    f = (1E-17F * 1E-17F);
    System.out.println(f); // prints "9.999999E-35"

    f = (float) (1E-17D * 1E-17D);
    System.out.println(f); // prints "1.0E-34"