当前位置: 首页 > 面试题库 >

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

皇甫喜
2023-03-14
问题内容

我正在尝试计算(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 div = ((360 / 24f) / 60); // div is now 0.25

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



 类似资料:
  • 问题内容: 为什么用Java将24 * 60 * 60 * 1000 * 1000除以24 * 60 * 60 * 1000不等于1000? 问题答案: 因为乘法会溢出32位整数。64位还可以: 显然,在乘法溢出之后,除法不会“撤消”该溢出。

  • 问题内容: 我试图通过乘以毫秒来计算30天,但是结果持续出现,结果是days_30的值是负数,我不确定为什么。 任何建议,不胜感激! 代码片段: days_30值导致:-1702967296 聚苯乙烯 结果较小(但仍为负数)。-1.702967296E9 问题答案: 您正在相乘,并且发生溢出,因为最大整数为。只有在乘法之后,它才会转换为。将第一个数字转换为。 或使用文字: 从一开始,这将迫使数学运

  • 问题内容: 运行下面的代码结果为0? 问题答案: 两个操作数(1和3)是整数,因此使用整数算术(此处为除法)。将结果变量声明为double只会导致除法后发生隐式转换。 当然,整数除法会返回除法四舍五入的真实结果。因此,0.333…此处的结果四舍五入为0。(请注意,处理器实际上不进行任何舍入,但是您仍然可以这样考虑。) 另外,请注意,如果两个操作数(数字)均以浮点数给出;3.0和1.0,甚至只是第一

  • 问题内容: 我正在使用Eclipse在Android中开发应用程序。我编写了以下代码,并在测试中无法访问第一个和第三个“ if ”块。为什么? 当我在数字前添加零时,等于运算符将返回false。 问题答案: 是一个八进制数字(前导0),而是一个十进制数字。 所以0123实际上等于83

  • 问题内容: 在中,将1月定义为第0个月,而不是第1个月。是否有任何特定原因? 我已经看到很多人对此感到困惑… 问题答案: 它只是Java日期/时间API的一团糟。列出问题所在将花费很长时间(而且我确定我不知道其中一半是问题)。诚然,处理日期和时间是很棘手的,但是无论如何都是这样。 帮个忙,改用Joda Time或JSR-310。 编辑:至于原因-如其他答案所述,这很可能是由于旧的C API引起的,

  • 问题内容: Java不能执行运算符重载,但可以用于和和其他一些类。这怎么可能? 更新: 为什么这样做? 问题答案: 不是操作员重载的示例。在语言中被内置为合并运算符 和 算术加法运算符。 这意味着用Java编写程序的人不能重载运算符,但是就Java语言的语法而言,它被定义为连接和加法运算符。 编辑 它适用于其他类,如和由于自动装箱。 如果您看一下执行字符串连接的Java程序的字节码,您会发现它创建