我正在尝试获取一个 double (由两个 int 的一小部分产生)作为我的以下函数的返回值。
public static double getThresHold(int n) {
int i, j;
int openSites = 0;
Percolation percolation = new Percolation(n);
do {
i = StdRandom.uniform(n) + 1;
j = StdRandom.uniform(n) + 1;
if ( !percolation.isOpen(i, j) ) {
percolation.open(i, j);
openSites++;
}
} while (!percolation.percolates());
double threshold = openSites * 1.0 / n*n;
return threshold;
}
但结果总是错误的,我得到的值例如:
200.0
240.0
260.0
预期结果应在 0.6
和 0.5
之间
我的代码有什么问题!
谢谢。
最佳答案
openSites * 1.0/n*n
是从左到右计算的,因此它相当于 ((openSites * 1.0)/n)*n
,它等于 openSites
。
您应该使用括号来强制执行运算的顺序,并且可以通过将 openSites
强制转换为 double
来强制浮点除法,而不是乘以 1.0:
double threshold = (double)openSites / (n*n);
这也可以,但我发现它不太优雅:
double threshold = openSites * 1.0 / (n*n);
关于java - 将 int 分数转换为 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32499220/