Java奇怪的ceil转换

时间:2013-02-12 15:04:03

标签: java decimal rounding

我不知道为什么,但如果我将参数从小数改为分数,我会得到两个不同的结果。

这些方法将返回确切的值。如果它是小数,我试图将数字四舍五入,例如:

  

0.0 - > 0

     

0.1 - > 1

     

0.4 - > 1

     

0.5 - > 1

     

0.6 - > 1

     

1.0 - > 1

     

1.1 - > 2

// accepts Double
private void myRound(Double d){
   int res = (int)Math.ceil(d);
   return (res <= 0 ? 1 : res);
}

// acepts int
private void myRound(int i){
   int res = (int)Math.ceil(i);
   return (res <= 0 ? 1 : res);
}

示例:

System.out.println(myRound(14 / 10));
  

输出:1

System.out.println(myRound(1.4);
  

输出:2

2 个答案:

答案 0 :(得分:5)

首先,转换转到Integer,其中(14/10)为1,然后将其转换为1. 1.4是双倍,所以它将它作为双数字。

答案 1 :(得分:3)

正如您所写,

14/101,因为1410都是int,因此结果为{ {1}}。

您列出的输出与您的代码不符(尤其是因为您显示的代码从未调用int),但我怀疑这将是您实际上的任何解释看到。