簡體   English   中英

Java((4-2)/ 4)= 0.0轉換為double后不為0.5

[英]Java ((4-2) / 4) = 0.0 not 0.5 after casting as double

此方法的myNumSides等於4,myNumSides是用戶輸入的。 將myAngle轉換為double之后,它仍然返回0.0而不是0.5。 為什么是這樣?

public double getMyAngle()
    {
        int n;
        n = myNumSides;

        double myAngle = (double) ((n - 2) / n);

        return myAngle;
    }

產量

Please enter number of sides => 4
Please enter length of each side => 100

Your polygon has 4 sides.
Each side of your polygon has a length of 100.0.
The angle of each vertex is 0.0.

為了獲得正確的答案,您必須執行以下操作:

double myAngle = ((n - 2.0) / n);

要么

double myAngle =  ((n - 2) / (double)n);

如果將零轉換為雙精度,則仍為零。 您對結果執行的操作不會影響其計算方式。

當Java執行double myAngle = (double) ((n - 2) / n); ,它將首先執行分割操作,然后執行鑄造操作。 在除法運算中,您正在將一個整數除以另一個整數。 因此,該除法運算的結果也將是整數。 在您的情況下,2/4 = 0。

正確的代碼將是首先進行轉換,然后進行除法。

double myAngle = ((double)(n - 2) / n);

您已經將數學作為int進行了運算,然后將該int轉換為double 這擴大了值,但不會恢復丟失的精度先前計算的值,我建議你只是做n一個double

public double getMyAngle() {
    double n = myNumSides;
    return ((n - 2) / n);
}

您可以將代碼更改為:

public double getMyAngle()
    {
        int n;
        n = myNumSides;
        double myAngle = (double)(n - 2)/n;
        return myAngle;
    }

=================答案應該是正確的!

暫無
暫無

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

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