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 和 n 都是 int 类型的,sum / n 返回的也是 int 类型的结果。
比如你的 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 sum 和 n 都是 int 类型的,按规定,两个整数类型间的 / 运算执行整除。既然 sum 和 n 同号并且 sum 比 n 小, sum/n 自然是 0

整数之间的运算关系是(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不同数值类型之间除法问题的主要内容,如果未能解决你的问题,请参考以下文章

Java——基本类型的类型转换

Flutter之Dart数据类型及数据之间的转换

Day 2 Python数值计算

基本类型的类型转换

python数值类型与序列类型

Java 7 (数据类型转换)