Java 如何通过JTextfield输入添加int

Java 如何通过JTextfield输入添加int,java,Java,我的代码运行良好,除了我无法获得准确的totalBill!下面是我的代码,问题区域在按钮1操作内。我相信我的数学很简单,但如果我输入:100(支出金额)15(总税额)和10(总小费金额)则得出123,只差2个是正确的。在我的一生中,我尝试过分数数学,我只是被难倒了,我确信这是一件相对容易的事情,我只是看不到它。非常感谢您的帮助 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java

我的代码运行良好,除了我无法获得准确的totalBill!下面是我的代码,问题区域在按钮1操作内。我相信我的数学很简单,但如果我输入:100(支出金额)15(总税额)和10(总小费金额)则得出123,只差2个是正确的。在我的一生中,我尝试过分数数学,我只是被难倒了,我确信这是一件相对容易的事情,我只是看不到它。非常感谢您的帮助

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class unit6_Q2 extends JFrame {

    JPanel main_1 = new JPanel();
    JLabel main_2 = new JLabel();
    JTextField question_1 = new JTextField("Enter amount here",30);
    JTextField question_2 = new JTextField("Enter tax percent here", 30);
    JTextField question_3 = new JTextField("Enter tip amount here", 30);
    JButton button_1 = new JButton("Calculate");

    public unit6_Q2() {
        setTitle("Tutorial");
        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        main_1.add(question_1);
        main_1.add(question_2);
        main_1.add(question_3);

        //if I want the use of enter on each TextField
        /*
        question_1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                String input_1 = question_1.getText();              
            }
        });

        question_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_2 = question_2.getText();
            }
        });
        question_3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_2 = question_3.getText();
            }
        });  */

        main_1.add(button_1);
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_1 = question_1.getText();  
                String input_2 = question_2.getText();
                String input_3 = question_3.getText();
                int amountSpent = Integer.parseInt(input_1);
                int amountTaxed = Integer.parseInt(input_2);
                int amountTipped = Integer.parseInt(input_3);

                int totalTax = (int)(amountSpent * (amountTaxed*(1/100.0f)));
                int totalTipped =(int)(amountSpent * (amountTipped*(1/100.0f)));
                int totalBill = totalTipped + totalTax + amountSpent;
                JOptionPane.showMessageDialog(null, totalBill);
            }
        });
        add(main_1);
    }
    public static void main(String[] args) {

        unit6_Q2 display = new unit6_Q2();
    }
}

这是因为您正在截断分形数据

            int totalTax = (int)(amountSpent * (amountTaxed*(1/100.0f)));
            int totalTipped =(int)(amountSpent * (amountTipped*(1/100.0f)));
使用
Math.round()
而不是
(int)
强制转换,或者简单地坚持使用浮点


您的做法是,如果假设totalTax为1.9,则由于int cast,它将变为1。

提示,为了解决此类问题,通常有助于将它们“减少”到其核心。在你的例子中:计算。绝对没有必要增加UI复杂性。你看

public class Test {
  public static void main(String[] args) {
     int amountSpent = Integer.parseInt("100");
     int amountTaxed = Integer.parseInt("15");
     int amountTipped = Integer.parseInt("10");

     int totalTax = (int)( amountSpent * amountTaxed/100.0f );
     System.out.println(totalTax);
     int totalTipped =(int)(amountSpent * amountTipped/100.0f);
     System.out.println(totalTipped);
     int totalBill = totalTipped + totalTax + amountSpent;
     System.out.println(totalBill);
    }
 }
它只起作用(因为它避免了从float到int的“中间”转换;这会产生舍入误差)

因此,我的答案更多的是一种解决此类问题的策略:

  • 扔掉任何不会导致问题的东西。在您的例子中:UI元素和类似的东西
  • 然后学习做数学时的确切规则,比如

  • 分配需要UI。但我很感激。我并不是说你要避开用户界面。关键是:你不需要UI代码来测试你的“数学”代码。相反,在你知道如何做基础工作之前,试图建造你的“房子”,只会让一切变得更加复杂@他说的不是作业,而是你问题的调试。通常最好是减少代码,简化代码以找到其根源。注意他的话,并投票支持他的答案,因为它是有帮助的,如果不是现在,它将在未来帮助你。这解决了这个问题。几分钟后将被标记为正确答案。