0

我使用这段代码来计算一些东西,但几乎在所有情况下,结果都是 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!");
    }
}
4

4 回答 4

1

这是因为这是整数除法的整数。在除法之前将它们都转换为浮动,你应该得到正确的结果。

于 2013-11-01T23:31:58.653 回答
0
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;

我要补充一点,我经常看到人们将除法放在表达式中的最后一个运算符,主要是因为这阐明了意图并且不需要人们理解操作顺序 + 评估是如何从左到右的。

于 2013-11-01T23:31:46.527 回答
0

您需要转换为浮点数,否则它看起来像 Java 的整数运算。

float result = bla * 100f/ potsum;

注意百分比的正确计算。

于 2013-11-01T23:31:49.233 回答
0

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

于 2013-11-01T23:32:57.163 回答