2013-02-12 63 views
0

我不知道为什么,但我得到两个不同的结果,如果我将参数从小数改为小数。Java奇怪的细胞转换

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

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

OUTPUT:1

System.out.println(myRound(1.4); 

OUTPUT:2

+1

您输出的示例与您的示例代码不匹配(并非最不重要的原因是您永远不会调用myRound)。 – 2013-02-12 15:07:05

+0

您可以用'Math.max(i,1)'替换int的版本,因为int的上限是int本身。 – 2013-02-12 15:10:22

+0

我想你的代码实际上是这样的:System.out.println(myRound(1.4));不是吗? – 2013-02-12 15:10:34

回答

5

事情是,首先转换到Integer,其中(14/10)是1,然后它将它上移到1. 1.4是一个双精度值,所以它使它成为一个双精度值。

+3

更具体地说:14/10是*精确* 1.不是1.0,而是1.将14或10转换为浮点或双精度(在它们之后加上'd'或'f',或' .0“为双)使得1.4的结果可以预期(或者至少足够接近)。 – 2013-02-12 15:08:00

+0

不只是可以,它**是**的原因。 – 2013-02-12 15:08:29

+0

@MichaelMyers,是的,我的坏。它是1. – user 2013-02-12 15:08:57

3

14/10,因为你写它,是1,因为这两个1410int,这样结果是int

你列出的输出结果与你的代码不匹配(不仅仅是因为你所展示的代码从来不会调用myRound),但我怀疑这将是你实际看到的任何解释。