我正在做一个简单的程序,它返回一组数字的百分比。但由于某种原因,除了最后一个,我无法正确地返回数字......
我无法理解为什么除了最后一个数字之外每个数字总是打印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());
}
}
有什么想法吗?
答案 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;
}
这样它就会产生一个浮点除法,它会返回一个不会截断小数的浮点数。