为什么在Java中(360/24)/ 60 = 0…

我正在尝试计算(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


这是为什么?我是在做一些真正愚蠢的事情,还是有充分的理由呢?


猛跑小猪
浏览 428回答 3
3回答

潇湘沐

算术中的所有操作数都不是浮点数-因此所有操作均使用整数算术完成,然后转换为浮点数。如果将适当的操作数的类型更改为浮点数,则可以正常工作:float div = ((360 / 24f) / 60); // div is now 0.25请注意,如果仅将60更改为浮点数,则最终会将360/24作为整数算术执行-在这种情况下可以使用,但不代表我真正的意图。基本上,您需要确保以所需的方式执行算术运算。

慕娘9325324

您实际上是在做整数除法(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;提示:如果精度很重要double,则在转换为之前,您需要使用和进行尽可能多的计算float。实际上,除非您的分析表明您绝对需要,否则您float应该始终选择double。    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"

眼眸繁星

在您的主要方法中public static void main(String[] args){      float div = ((360 / 24) / 60);      System.out.println(div);}注意360、24和60都是整数值。这样,您将获得怪异的值。360/24-> 15(非常好)15/60-> 0.4(浮点)不幸的是,对于您来说,浮点数被截断了,因此您得到:-> 0 (integer value)然后,通过将0赋给浮点变量,可以将0更改为浮点值0.0。因此结果。如果要划分它们,则需要将它们更改为浮点值。正确的代码应如下所示:public static void main(String[] args){      float div = ((360.0 / 24.0) / 60.0);      System.out.println(div);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java