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

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

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

算术中的操作数都不是浮点数 – 所以它全部用整数运算完成, 然后转换为浮点数。 如果将适当的操作数的类型更改为float,它将正常工作:

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

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

你实际上在进行整数除法( 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; 

提示:如果精度很重要,那么在转换为float之前,您希望使用double进行尽可能多的计算。 事实上,除非你的分析表明你绝对需要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); }