2013-03-26 95 views
1
public class test { 
    public static void main(String[] args) { 
    int total = 2; 
    int rn = 1; 
    double rnp = (rn/total) * 100; 
    System.out.println(rnp); 
} 
} 

为什么它打印0.0而不是50.0?Java算术部门

https://www.google.com/search?q=100*(1%2F2)&aq=f&oq=100*(1%2F2)

+0

因为在整数除法中'1/2'是0。 – corsiKa 2013-03-26 23:05:54

+0

[Division in Java总是会导致零(0)?](http://stackoverflow.com/questions/10455677/division-in-java-always-results-in-zero-0) – 2013-03-26 23:06:57

+1

也可能是重复的考虑到[C程序设计师](http://stackoverflow.com/questions/8906722/c-programming-division)的重复,考虑到答案是一样的。 – corsiKa 2013-03-26 23:08:15

回答

7

该部门在整数空间时,没有概念的部分,你需要像

double rnp = (rn/(double) total) * 100 
2

要调用此

(rn/total) 

整数除法轮整数除法趋向于零。

试试这个:

double rnp = ((double)rn/total) * 100; 
+1

仔细观察。演员在分裂之前。 – Kyurem 2013-03-26 23:08:34

+0

@Johan,在这个地方演员仍然有效。 – rgettman 2013-03-26 23:09:09

+0

结果你的观察效果比我的好:) – 2013-03-26 23:12:31

0

在java中,和大多数其他编程语言,当你划分两个整数,结果也是整数。其余部分被丢弃。因此,1/2返回0。如果您想要返回floatdouble值,则需要执行类似1 * 1.0/2的操作,该操作将返回0.5。将整数乘以或用double或float将其转换为该格式。

0
public class test 
{ 
    public static void main(String[] args) 
    { 
    int total = 2; 
    int rn = 1; 
    double rnp = (rn/(float)total) * 100; 
    System.out.println(rnp); 
} 
}