Java 结果总是错误的
我想创建一个简单的计算器$21.37可以更改为21 1美元硬币、0 50美分硬币、1 20美分硬币。但是,我的剩余结果总是错误的,我不明白为什么。下面是我的代码,请大家帮忙,谢谢大家Java 结果总是错误的,java,Java,我想创建一个简单的计算器$21.37可以更改为21 1美元硬币、0 50美分硬币、1 20美分硬币。但是,我的剩余结果总是错误的,我不明白为什么。下面是我的代码,请大家帮忙,谢谢大家 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Question extends JFrame implements ActionListener { private JLabel amt,doll
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Question extends JFrame implements ActionListener
{
private JLabel amt,dollar,fifty,title,result,error,creator;
private TextField tb1,tb2,tb3;
private JButton count;
public Question()
{
setSize(400,300);
JPanel contentPane = new JPanel(null);
contentPane.setBorder(BorderFactory.createLineBorder(Color.gray));
setContentPane(contentPane);
count = new JButton("=");
title = new JLabel("Calculate Change");
amt = new JLabel("Enter the amount:");
dollar = new JLabel("1 Dollar Coin:");
fifty = new JLabel("50 Cent Coin:");
error = new JLabel("wrong information.");
creator = new JLabel("Created by ?????");
Font bold = new Font("Arial",Font.BOLD,15);
Font wrong = new Font("Arial",Font.ITALIC,12);
Font smaller = new Font("Arial",Font.ITALIC,10);
error.setForeground(Color.red);
tb1 = new TextField(13);
tb2=new TextField(12);
tb3= new TextField(12);
tb2.setEnabled(false);
tb3.setEnabled(false);
creator.setFont(smaller);
error.setFont(wrong);
title.setFont(bold);
title.setBounds(130,-14,150,40);
amt.setBounds(20, 20, 120, 20);
dollar.setBounds(40, 45, 120, 20);
fifty.setBounds(40, 70, 120, 20);
tb1.setBounds(160, 21, 90, 24);
tb2.setBounds(160, 45, 90, 20);
tb3.setBounds(160, 70, 90, 20);
error.setBounds(260,170,150,20);
count.setBounds(100,200,90,20);
creator.setBounds(240,220,180,20);
contentPane.add(title);
contentPane.add(amt);
contentPane.add(dollar);
contentPane.add(fifty);
contentPane.add(tb1);
contentPane.add(tb2);
contentPane.add(tb3);
contentPane.add(error);
contentPane.add(creator);
contentPane.add(count);
count.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
try
{
//String input = tb1.getText();
double convert = Double.parseDouble(tb1.getText());
if((e.getSource() == count) && (convert >=1))
{
double result;
result = convert /1;
convert = convert % 1;
int result2 = (int)result;
String result3 = String.valueOf(result2);
tb2.setText(result3);
}
if((convert >= 0.5) && (convert < 0.99))
{
tb3.setText("1");
convert = convert % 0.5;
String result4 = String.valueOf(convert);
error.setText(result4);
}
}catch(Exception ex)
{
error.setText("Invalid input.");
}
}
public static void main(String []args)
{
Question frame = new Question();
frame.setVisible(true);
}
}
import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类问题扩展JFrame实现ActionListener
{
私人JLabel金额,美元,50,标题,结果,错误,创建者;
专用文本字段tb1、tb2、tb3;
私人按钮计数;
公众问题(
{
设置大小(400300);
JPanel contentPane=新的JPanel(null);
setboorder(BorderFactory.createLineBorder(Color.gray));
setContentPane(contentPane);
计数=新的JButton(“=”);
标题=新JLabel(“计算变更”);
金额=新的JLabel(“输入金额:”);
美元=新的JLabel(“1美元硬币”);
50=新的JLabel(“50美分硬币”);
错误=新JLabel(“错误信息”);
创建者=新的JLabel(“创建人”);
字体粗体=新字体(“Arial”,字体粗体,15);
字体错误=新字体(“Arial”,字体斜体,12);
字体较小=新字体(“Arial”,字体斜体,10);
错误。设置前景(颜色为红色);
tb1=新文本字段(13);
tb2=新文本字段(12);
tb3=新文本字段(12);
tb2.设置启用(假);
tb3.设置启用(假);
creator.setFont(较小);
错误。设置字体(错误);
title.setFont(粗体);
标题.立根(130,-14150,40);
退让金额(20,20,120,20);
美元.下跌(40,45,120,20);
50.挫折(40、70、120、20);
tb1.立根(160、21、90、24);
tb2.立根(160,45,90,20);
tb3.立根(160、70、90、20);
误差.立根(260170150,20);
立根数(100200,90,20);
创造者.挫折(240220180,20);
contentPane.add(标题);
contentPane.add(amt);
contentPane.add(美元);
contentPane.add(五十);
contentPane.add(tb1);
contentPane.add(tb2);
contentPane.add(tb3);
contentPane.add(错误);
contentPane.add(创建者);
contentPane.add(count);
count.addActionListener(这个);
}
已执行的公共无效操作(操作事件e)
{
尝试
{
//字符串输入=tb1.getText();
double convert=double.parseDouble(tb1.getText());
如果((例如getSource()==count)&&(convert>=1))
{
双重结果;
结果=convert/1;
convert=转换为%1;
int result2=(int)结果;
String result3=String.valueOf(result2);
tb2.setText(结果3);
}
如果((转换>=0.5)和&(转换<0.99))
{
tb3.setText(“1”);
转换=转换%0.5;
String result4=String.valueOf(convert);
错误。setText(结果4);
}
}捕获(例外情况除外)
{
错误.setText(“无效输入”);
}
}
公共静态void main(字符串[]args)
{
问题框架=新问题();
frame.setVisible(true);
}
}
您应该格式化结果。因此,不是:
String result3 = String.valueOf(result2);
考虑做:
String result3 = String.format("%.2f", result2);
这将删除尾随数字,并将数字四舍五入以供显示
有关如何使用
String.format(…)
的更多详细信息,请查看由于使用%0.5
double convert = Double.parseDouble("21.37");
int oneDollarCoins = (int) convert; // throws away the fractions
System.out.println(oneDollarCoins); // prints 21
convert -= oneDollarCoins;
int cents = (int) (convert * 100);
System.out.println(cents); // prints 37
// modulo the cents % 50, 20, ...
// don't use % 0.5
对于较小的数字
double
应该可以,但是对于较大的数字,您可能会得到其他人提到的错误结果。您到底想要实现什么,预期的输出是什么,请参考感兴趣的行。代码中充满了无用的东西,只发布相关的代码(actionPerformed)并发布输入/输出示例。当需要精确精度时,不应使用double
s或float
s。像21.37
这样的十进制数不能准确地存储在浮点变量中。请参阅并使用整数算术(以美分为单位)。呵呵,我刚刚输入了它。顺便说一句,我想应该是结果;)@enterbios:我想这是针对result3和result4的但是谢谢你的评论!