为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2019-11-04 10:26:27
我正在尝试计算(360/24)/ 60当我应该得到0.25时,我一直得到答案0.0换句话说:我想将360除以24,然后将结果除以60public class Divide {    public static void main(String[] args){      float div = ((360 / 24) / 60);      System.out.println(div);    }}打印输出:0.0这是为什么?我是在做一些真正愚蠢的事情,还是有充分的理由呢?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

算术中的所有操作数都不是浮点数-因此所有操作均使用整数算术完成,然后转换为浮点数。如果将适当的操作数的类型更改为浮点数,则可以正常工作:


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

请注意,如果仅将60更改为浮点数,则最终会将360/24作为整数算术执行-在这种情况下可以使用,但不代表我真正的意图。基本上,您需要确保以所需的方式执行算术运算。


查看完整回答
反对 回复 2019-11-04
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您实际上是在做整数除法(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"


查看完整回答
反对 回复 2019-11-04
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

在您的主要方法中


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);

}


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 427 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信