![](/img/trans.png)
[英]It does not return the language correctly when the locale.getDisplayName function is called
[英]function does not return number correctly
我正在做一个简单的程序,该程序返回一组每个数字的百分比。 但是由于某种原因,除了最后一个,我无法正确返回数字...
我不知道为什么它总是为每个数字(除了最后一个数字)打印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());
}
}
任何想法?
这是整数除法的经典情况。 当除以两个整数时,结果是一个整数。 这意味着2/3
为0。乘以100,仍为0。
代替(i / num) * 100
,使用i * 100 / num
。
这样,您可以将200除以3,得到所需的66。
或者,您可以使用浮点数进行计算:
return ((double) i / num) * 100;
通过强制转换, i
成为双精度型,这意味着i / num
计算为双精度型而不是整数。
当您将/放在整数之间时,会得到整数除法。 3/2 = 1不是1.5
您可以尝试首先使用双精度数,或者像这样(double)(3)/ 2强制转换成双精度数并得到1.5,但这有其自身的问题,因为double不在10以内。如果您想对非整数进行完美的计算在以10为底的基础上,查看BigDecimal。 我进入为什么在这里
问题出在
私人双doMath(int i,int num){
System.out.println("printing result = " + (i / num) * 100); return (i / num) * 100;
}
这是整数除法,当将两个整数相除时,结果是一个整数(将任何十进制值都截断),您可能需要将值解析为浮点数,以便解决此问题,如下所示:
从:
私人双doMath(int i,int num){
System.out.println("printing result = " + (i / num) * 100); return (i / num) * 100;
}
至:
私人双doMath(int i,int num){
System.out.println("printing result = " + (i / (float) num) * 100); return (i / (float) num) * 100;
}
这样,它将进行浮点除法,该除法将返回不截断小数的浮点数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.