java不同数值类型之间除法问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java不同数值类型之间除法问题相关的知识,希望对你有一定的参考价值。
概率算法计算π近似值
为何我将PI=4.0*sum/n;写成 PI=4.0*(sum/n);结果会是0? 难不成sum/n==0?
public class Hellojava
public static double mb(int n)
double x,y;
double PI;
int i,sum;
sum=0;
for(i=1;i<n;i++)
x=Math.random(); //random()只能产生0~1间随机数
y=Math.random();
if(x*x+y*y<=1)
sum++;
PI=4.0*sum/n;
return PI;
public static void main( String args[] )
double PI; //重新定义一个同名变量 PI
int n=5000000;
PI=mb(n);
System.out.println("PI的近似值约为:"+mb(n));
比如你的 sum = 1, n = 2,那么 sum / n 本来应该等于 0.5 ,当时 返回结果是 int 啊,所以这个时候小数点之后的数值就会被去掉,只将小数点之前的数值赋值给结果,就是 0。
类似,int a = 3 / 2; 那么 a = 1。追问
- -还真是 大神我再问一个 for(i=0;i<n;i++)这样有执行n次随机吧 为什么我看别人都是
for(i=1;i<n;i++)这样好像只有n-1个随机数呀
首先纠正一个错误哈,不是 “n次随机”,这种叫 “n次循环”。
你说的对,for(i=0;i<n;i++) 是 n 次循环,但 for(i=1;i<n;i++) 是 n-1 次循环。
整数之间的运算关系是(a/b)*b+a%b = a,而非 (a/b)*b ≈ a追问
- -还真是 大神我再问一个 for(i=0;i<n;i++)这样有执行n次随机吧 为什么我看别人都是
for(i=1;i<n;i++)这样好像只有n-1个随机数呀
以上是关于java不同数值类型之间除法问题的主要内容,如果未能解决你的问题,请参考以下文章