2013-08-29 54 views
0

好的,我已經搜索了這個高低,回來抓我的頭...我習慣了PHP和Java的新,所以請耐心等待我...在java中執行除法的正確方法

我正在構建一個應用程序,它可以完成一些基本的數學運算(個人應用程序,而不是市場推廣),我將每天使用它。該應用程序安裝正常並運行,但是當我點擊計算按鈕時,我得到0作爲答案。我究竟做錯了什麼?

float val1 = Integer.parseInt(fat.getText().toString()) *1; 
float vals1 = (int) 3.89; 
float val2 = Integer.parseInt(carbs.getText().toString()) *1; 
float vals2 = (int) 9.17; 
float val3 = Integer.parseInt(fiber.getText().toString()) *1; 
float vals3 = (int) 12.49; 
float val4= Integer.parseInt(protein.getText().toString()) *1; 
float vals4 = (int) 10.94; 
float answer = (float) (((val4/vals4) + (val2/vals2) + (val1/vals1)) - (val3/vals3)); 
Integer answerf = (int) answer; 
points.setText(answerf.toString()); 

編輯: 所要求的預期值(試運行)

val1 = 7 
val2 = 26 
val3 = 2 
val4 = 5 

預期的成果是5

+0

請發表您的EditTexts的 –

+2

你爲什麼鑄造彩車爲int值是多少?您可以通過在數字後面加上「f」來創建浮點值。 – kiheru

+1

幾乎所有的鑄件都沒有意義... – BackSlash

回答

0

最終結果可能是由於所有類型鑄件的精度損失造成的,這些鑄件可能會無意中造成的。

當你施放一個雙重或浮點值到一個int,然後回到浮動,你失去了很多精度的。您應該保持變量類型一致,直到您真正想要或需要將計算值從一種類型轉換爲另一種類型的最後一個步驟。

你也不需要通過乘1(* 1),因爲它沒有做任何整數相乘的結果。

如果你需要使用圓Math.round(),而不是鑄造浮到整數的事情。

您的代碼,這取決於你打算做什麼,應該更像:

float val1 = Float.parseFloat(fat.getText().toString()); 
float vals1 = 3.89f; 
float val2 = Float.parseFloat(carbs.getText().toString()); 
float vals2 = 9.17f; 
float val3 = Float.parseFloat(fiber.getText().toString()); 
float vals3 = 12.49f; 
float val4= Float.parseFloat(protein.getText().toString()); 
float vals4 = 10.94f; 
float answer = (((val4/vals4) + (val2/vals2) + (val1/vals1)) - (val3/vals3)); 
points.setText(String.valueOf(Math.round(answer))); 
+0

在點字段中仍然返回0。 –

+0

我的部分錯別字使它顯示0 ...就像我說的,對於java來說是新的,非常感謝你的幫助! –

0

幾件事情是錯誤的。首先,你正在使用Integer.parseInt(),但你試圖解析一個浮點數。您應該使用Float.parseFloat()Double.parseDouble()

此外,

float vals1 = (int) 3.89; 

並沒有真正意義。通過將雙重文字轉換爲整數,您將刪除小數部分,但仍將其存儲在浮點中。刪除鑄件,並將3.89更改爲3.89F以表示它是一個浮標。

因爲截至目前,這到底行:

float answer = (float) (((val4/vals4) + (val2/vals2) + (val1/vals1)) - (val3/vals3)); 

是在一個int,它會返回一個int做一大堆的數學運算,但此時你就投射到float 。所以這將是一個float,但有一個int值。

+1

在每個類型轉換結束時的'* 1'並不真正有意義 – BackSlash

+0

好的,我改變了它,刪除了這個轉換並且添加了f。最終,我正在尋求作爲一個浮點計算,然後到下一個級別,所以在這一點上,我正確地認爲將結果轉換爲int是錯誤的做法? –

+0

只需對浮動類型變量執行所有操作,就可以將結果計算爲浮點型。那麼你應該使用Math.round()方法來將你的float四捨五入成int,如果這是你需要的。 – Kon

1

檢查您的EditTexts是否包含有效的Numbers,並按如下方式操作: 在此示例中,我假設EditText包含值「10」。這裏

float val1 = Integer.parseInt("10") *1; 
    float vals1 = 3.89f; 
    float val2 = Integer.parseInt("10") *1; 
    float vals2 = 9.17f; 
    float val3 = Integer.parseInt("10") *1; 
    float vals3 = 12.49f; 
    float val4= Integer.parseInt("10") *1; 
    float vals4 = 10.94f; 
    float answer = (float) (((val4/vals4) + (val2/vals2) + (val1/vals1)) - (val3/vals3)); 

    System.out.println("Result: " + answer); 

結果是:3.7746425

此外,它沒有任何意義,投你的雙值 INT才能夠將它們分配浮動。

相關問題