[英]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.