功能无法正确返回数字

时间:2014-10-27 03:12:51

标签: java math return-value

我正在做一个简单的程序,它返回一组数字的百分比。但由于某种原因,除了最后一个,我无法正确地返回数字......

我无法理解为什么除了最后一个数字之外每个数字总是打印0%。

以下是代码:

public class MainWindow extends JFrame implements ActionListener {
private JButton theButton = new JButton("Calculer sur 100");
private JTextField textField = new JTextField("");
private JTextArea text = new JTextArea("");
private JScrollPane scroller = new JScrollPane(text);

public MainWindow() {
    setLayout(new BorderLayout());
    setTitle("Calculateur de pourcentage");
    setSize(400, 500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);

    layoutManagement();

    setVisible(true);
}

private void layoutManagement() {

    text.setEditable(false);
    theButton.addActionListener(this);

    getContentPane().add(scroller, BorderLayout.CENTER);
    getContentPane().add(textField, BorderLayout.NORTH);
    getContentPane().add(theButton, BorderLayout.SOUTH);
}

private int checkForNumber()
{
    int numl;
    try{
        numl = Integer.parseInt(textField.getText());
    }catch(NumberFormatException e)
    { 
        text.setText("Please try with number...");
        System.out.println("Error in number format. Returning 0");
        return 0;
    }
    System.out.println("numl = " + numl);
    return numl;
}

private double doMath(int i, int num)
{
    System.out.println("printing result = " + (i / num) * 100);
    return (i / num) * 100;
}

private void print100(int num) {
    for (int i = 1; i < num + 1; i++)
    {
        text.setText(text.getText() + "\n" + i + " : " + doMath(i, checkForNumber()));
    }
}

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == theButton) {
        text.setText("");
        print100(checkForNumber());
    }
}

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这是整数除法的经典案例。除以两个整数时,结果为整数。这意味着2/3为0.乘以100,它仍为0.

而不是(i / num) * 100,请使用i * 100 / num

这样,你将200除以3,得到你正在寻找的66。

或者,您可以使用浮点进行计算:

return ((double) i / num) * 100;

通过强制转换,i变为double,这意味着i / num被计算为double而不是int。

答案 1 :(得分:1)

当你在整数之间放置时,你得到整数除法。 3/2 = 1而不是1.5

你可以尝试首先使用双打或者像这样(双)(3)/ 2进行加倍并获得1.5但是这有它自己的问题,因为double不在基数10中。如果你想要完美的计算基数10中的非整数检查BigDecimal。我进入了为什么here

答案 2 :(得分:1)

问题在于

  

private double doMath(int i,int num){

System.out.println("printing result = " + (i / num) * 100);
return (i / num) * 100; 
     

}

这是整数除法,当除以两个整数时,结果是一个整数(截断任何十进制值),您可能想要将值解析为float以解决该问题,如下所示:

FROM:

  

private double doMath(int i,int num){

System.out.println("printing result = " + (i / num) * 100);
return (i / num) * 100; 
     

}

TO:

  

private double doMath(int i,int num){

System.out.println("printing result = " + (i / (float) num) * 100);
return (i / (float) num) * 100; 
     

}

这样它就会产生一个浮点除法,它会返回一个不会截断小数的浮点数。