2010-07-08 29 views

回答

12

如果我不是完全错误的,35/4结果始终为8即使在

double result = 35/4; 

,你会得到这样的结果(如双,即8.0)。这是因为354都是整数,因此应用整数除法。表达式首先被计算为整数,只有结果被转换为双精度值。

在另一方面,如果你想正确的结果8.75你就必须写应用

double result = 35./4; 

,以迫使浮点除法。这是一个常见的陷阱。

当然,如果你有双重价值,就像在

double a = 35; 
double b = 4; 

你需要或者明确地强制转换为int或使用Math.floor()在以前的文章建议。

+0

所以,如果我只写int/int,它很酷?我会得到一个8? – user225626 2010-07-08 08:33:44

+0

@ user225626是的。你为什么不自己尝试一下呢? – Jesper 2010-07-08 11:18:41

+0

我在接受之前做过。我只是想确保这是语言设计。 – user225626 2010-07-08 13:46:31

10

使用

Math.floor(..) 

返回最大的(最接近正无穷大)double值小于或等于参数并且等于一个数学整数。

或者,如果你需要操作整数,而不是双打,然后简单地分配给INT:

int a = 35/4; 

其实,如果你用数字直接工作,或者为int变量,你会得到一个int自动结果。

2

使用

int myInt = (int) Math.floor(value); 

8.75将被舍入到8铸造为INT去除的情况下,值小数是双显式转换表达为INT

0

+2

不,它会返回9(如果参数是“双”) – Bozho 2010-07-08 07:14:08

+0

是的,你说得对。我不好。 – 2010-07-08 07:15:41

+0

你可以编辑你的答案,写出正确的方法。 – Bozho 2010-07-08 07:19:21

1
int x = 35/4 

整数除法造成8人,你可以给它返回`8.75`代码返回而不是8.75