我的代码工作正常,但事实上我无法获得准确的totalBill!以下是我的代码,问题区域在button_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();
}
}
答案 0 :(得分:1)
这是因为您正在截断大量数据。
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。
答案 1 :(得分: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的“中间”转换;这会给你那些舍入错误)。
所以,我的答案更多的是如何解决这些问题的策略: