为什么我会得到不同的结果,但实际上它们是相同的数字?

时间:2011-07-26 16:42:45

标签: java

  

可能重复:
  Why does (360 / 24) / 60 = 0 … in Java

浮动答案= 5/2;和浮动答案5.0 / 2.0;

当我添加小数点时,我得到2.5这是正确但没有小数我得到2?

6 个答案:

答案 0 :(得分:4)

整数除法与浮点除法不同。在第一个示例中,您将两个整数分开,得到结果2,然后将其分配给浮点数。

答案 1 :(得分:2)

这很简单。根据整数除法评估5/2(因为5和2是整数),结果是2(整数除法给出商,即向下舍入),并将其转换为浮点数。 5.0 / 2.0进行浮点除法,因此得到2.5的正确答案。

答案 2 :(得分:1)

发生这种情况的原因是因为当你使用5和2时,数字被解释为整数,这也会产生一个舍入的整数,然后转换为浮动"回答"。当您指定5.0和2.0时,这些被认为是浮点数,这允许结果也是浮点数。

答案 3 :(得分:1)

从用于数字推广的Java文档:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#239829

  

15.17.2分部操作员/

     

二元/运算符执行除法,产生它的商   操作数。左手操作数是红利和右手   操作数是除数。 整数除法向0舍入。即   为操作数n和d生成的商,它们是二进制之后的整数   数字促销(§5.6.2)是一个整数值q,其大小为   在满足| d·q || n |的同时尽可能大;此外,q是积极的   当| n || d |并且n和d具有相同的符号,但q为负时   | N || d |和n和d有相反的符号。有一个特例   不满足此规则:如果被除数是负整数   其类型的最大可能量,然后除数为-1   发生整数溢出,结果等于被除数。   尽管溢出,但在这种情况下不会抛出异常。在   另一方面,如果整数除数中除数的值为0,   然后抛出ArithmeticException。

5/2的结果是一个整数,然后在赋值期间将该整数转换为浮点数。

答案 4 :(得分:0)

因为第一个是基于整数。因此,该部门将四舍五入为2。然后它被转换成浮动。

第二个是从一开始就基于花车,所以你得到了正确答案。

答案 5 :(得分:0)

你用整数计算并使用整数算术。在计算之后发生了浮动的转换。你可以写

float answer =((float)5)/((float)2)