java - 将 int 分数转换为 double

标签 java casting

我正在尝试获取一个 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.60.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/

相关文章:

java - 从 double 转换为 int 而不截断为零

Laravel 无需应用强制转换即可获取数据

java - Spring 过滤器没有被调用

java - JUnit 测试 - 参数化测试 - 'No implicit conversion of type java.lang.Integer to type [Ljava.lang.Integer;'

json - typescript JSON字符串类

sql - 将 SQL FLOAT 转换为 SQL INT,丢失数据

java - Java中ClassCastException的解释

java - Android OpenGL ES 以纵横比全屏显示图像

java - 检查是什么触发了 WindowClosing 事件

java - 如何在 java 中使一整列不可选择?