簡體   English   中英

為什么用Java計算錯誤?

[英]Why is my calculation in Java wrong?

我使用此代碼來計算內容,但幾乎在每種情況下,結果均為0.0。 為什么? 編譯器中沒有警告或錯誤。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try {
        int potsum = Integer.valueOf(jTextField1.getText());
        int bla = Integer.valueOf(jTextField2.getText());
        float result = ((Integer.valueOf(bla)/Integer.valueOf(potsum)) * 100);
        jLabel3.setText(Float.toString(result));
    } catch (NumberFormatException e) {
        System.out.println("Error!");
    }
}

這是因為這是整數除法中的整數。 將它們都拋到除法之前,您應該獲得正確的結果。

float result = ((Integer.valueOf(bla)/Integer.valueOf(potsum)) * 100);

正在執行整數除法,將值底限設置為(1/2 => 0,2/3 => 0,3/3 => 1)。

考慮類型轉換或使除法的分子/分母為浮點值。

float result = Integer.valueOf(bla) * 100.0f / Integer.valueOf(potsum);

要么

float result = (float)Integer.valueOf(bla) / Integer.valueOf(potsum) * 100.0f;

要么

float result = Integer.valueOf(bla) / (float)Integer.valueOf(potsum) * 100.0f;

我要補充一點,我經常看到人們將除法運算符放在表達式中的最后一個運算符,主要是因為這澄清了意圖,並且不需要人們理解運算的順序以及從左到右的求值方式。

您需要將其轉換為浮點數,否則對於Java而言它看起來像整數算術。

float result = bla * 100f/ potsum;

注意正確的百分比計算。

float result = ((Float.valueOf(bla)/Float.valueOf(potsum)) * 100);

暫無
暫無

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

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