2015-03-24 28 views
0
public void actionPerformed(ActionEvent ae) { 
    float x, y; 
    if(ae.getSource()==z) { 
     x= Float.parseFloat(a.getText()); 
     y= x*x*3.14; 
     Boomer.setText(String.valueOf(y)); 
    } 
} 

我正在製作乘法GUI。我已經做了一些之前,但這一個稍有不同。這一個不同之處,因爲我特別允許用戶通過輸入半徑找到一個圓的區域。將用戶輸入乘以十進制數

我簡單地寫這個代碼就像任何其他基本的數學函數相關的程序,但我指定了圓的面積方程。這是問題出現的地方。當我指定必須使用小數來查找輸出時,程序無法工作。例如,如果我要告訴它做x * x * 10,它可以正常工作。我只能假設問題源於小數。

+1

因此,當您不執行'x * x * 10'並使用小數如x * x * 3.14'時會發生什麼?你是否收到錯誤信息或者是否有價值? – DigitalNinja 2015-03-24 22:54:11

+0

下面是我得到的錯誤消息: BaffleGUI.java:39:錯誤:不兼容的類型:可能有損耗從雙倍轉換爲浮點 – BillClintonInSpace 2015-03-24 23:05:43

+0

好吧,所以我認爲你可以做zachjack的答案或簡單地將3.14轉換爲像這樣的float: y = x * x *(float)3.14;'並且錯誤應該消失(如果您不關心「有損轉換」)。 – DigitalNinja 2015-03-24 23:07:47

回答

0

我的猜測是3.14被編譯爲Double而不是Float。

我會推薦使用Math.PI而不是隻是3.14,然後將值更改爲雙精度。這應該解決任何問題。

0

您可以將此行更改爲此y= x*x*(float)3.14;

1

很明顯,3.14是一個雙值。因此,下面這行代表不兼容的類型。它試圖將3.14雙精度浮點數轉換爲浮點數。

float pi = 3.14; 

這是一種可能的方式:

float pi = 3.14f; 

這是另一個問題:

float pi = (float) 3.14; 

你應該採取zachjack的建議得到精確的結果。 Math.PI也相當於雙倍。因此,您應該使用以下線計算面積:

y = x * x * (float) Math.PI;