簡體   English   中英

將int分數轉換為兩倍

[英]Casting int fraction to double

我正在嘗試獲取雙精度數(從兩個整數的分數中得出)作為以下函數的返回值。

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

您應該使用括號來強制操作順序,而不是乘以1.0,而可以通過將openSites強制openSitesdouble來強制進行浮點除法:

double threshold = (double)openSites / (n*n);

這也可以工作,但我發現它不太優雅:

double threshold = openSites * 1.0 / (n*n);
double threshold = openSites * 1.0 / (n*n);

只需在除數周圍添加括號即可。 不必openSites轉換為double,因為您將openSites乘以1.0,這會使表達式openSites * 1.0成為double。

因此,您的錯誤實際上不是強制轉換問題,而是先將openSites * 1.0除以n ,然后將結果與n相乘。 因此,在您的版本中,您基本上可以得到openSites * 1.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM