注:初学者程序还很是稚嫩,还有很多不足。
出现问题如下,例如要输入0.6 JTextField显示是0.6000000000000001
但是输入9.6却能正常显示。
不解。
源码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JTextField;public class Jisuanqi03 extends WindowAdapter
implements ActionListener
{
private double jieguo;
private double number;
private double jishu;
private boolean denghao;
private boolean xiaoshudian;
private char fuhao;
private Frame f;
private JTextField tf;
private Button b1;
private Button b2;
private Button b3;
private Button b4;
private Button b5;
private Button b6;
private Button b7;
private Button b8;
private Button b9;
private Button b10;
private Button b11;
private Button b12;
private Button b13;
private Button b14;
private Button b15;
private Button b16;
private Panel p;
public Jisuanqi03()
{
jieguo = 0;
number = 0;
jishu = 1;
denghao = false;
xiaoshudian = false;
fuhao = '+';
} public static void main(String args[])
{
Jisuanqi03 jisuanqi02 = new Jisuanqi03();
jisuanqi02.go();
} public void go()
{
f = new Frame("计算器测试版 1.3 by xin");
p = new Panel();
p.setLayout(new GridLayout(4, 4));
tf = new JTextField(30);
tf.setHorizontalAlignment(4);
tf.setEditable(false);
b1 = new Button("7");
b2 = new Button("8");
b3 = new Button("9");
b4 = new Button("+");
b5 = new Button("4");
b6 = new Button("5");
b7 = new Button("6");
b8 = new Button("-");
b9 = new Button("1");
b10 = new Button("2");
b11 = new Button("3");
b12 = new Button("*");
b13 = new Button("0");
b14 = new Button(".");
b15 = new Button("=");
b16 = new Button("/");
f.add(tf, "North");
f.add(p, "Center");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
f.addWindowListener(this);
f.setSize(200, 200);
f.setVisible(true);
} public void actionPerformed(ActionEvent actionevent)
{
String s = actionevent.getActionCommand();
switch(s.charAt(0))
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(denghao)
{
jieguo = 0;
number = 0;
fuhao = '+';
}
Integer integer = new Integer(s);
if(xiaoshudian)
{
jishu = jishu / 10;
number = number + (double)integer.intValue() * jishu;
} else
{
number = number * 10 + (double)integer.intValue();
}
Double double1 = new Double(number);
tf.setText(double1.toString());
xiaoshudian = false;
denghao = false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0) != '=' && denghao)
{
fuhao = s.charAt(0);
denghao = false;
} else
{
switch(fuhao)
{
case '+':
jieguo = jieguo + number;
break; case '-':
jieguo = jieguo - number;
break; case '*':
jieguo = jieguo * number;
break; case '/':
jieguo = jieguo / number;
break;
}
}
xiaoshudian = false;
jishu = 1;
Double double2 = new Double(jieguo);
tf.setText(double2.toString());
if(s.charAt(0) != '=')
{
number = 0;
fuhao = s.charAt(0);
} else
{
denghao = true;
}
break; case '.':
xiaoshudian = true;
break;
}
} public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
}
出现问题如下,例如要输入0.6 JTextField显示是0.6000000000000001
但是输入9.6却能正常显示。
不解。
源码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JTextField;public class Jisuanqi03 extends WindowAdapter
implements ActionListener
{
private double jieguo;
private double number;
private double jishu;
private boolean denghao;
private boolean xiaoshudian;
private char fuhao;
private Frame f;
private JTextField tf;
private Button b1;
private Button b2;
private Button b3;
private Button b4;
private Button b5;
private Button b6;
private Button b7;
private Button b8;
private Button b9;
private Button b10;
private Button b11;
private Button b12;
private Button b13;
private Button b14;
private Button b15;
private Button b16;
private Panel p;
public Jisuanqi03()
{
jieguo = 0;
number = 0;
jishu = 1;
denghao = false;
xiaoshudian = false;
fuhao = '+';
} public static void main(String args[])
{
Jisuanqi03 jisuanqi02 = new Jisuanqi03();
jisuanqi02.go();
} public void go()
{
f = new Frame("计算器测试版 1.3 by xin");
p = new Panel();
p.setLayout(new GridLayout(4, 4));
tf = new JTextField(30);
tf.setHorizontalAlignment(4);
tf.setEditable(false);
b1 = new Button("7");
b2 = new Button("8");
b3 = new Button("9");
b4 = new Button("+");
b5 = new Button("4");
b6 = new Button("5");
b7 = new Button("6");
b8 = new Button("-");
b9 = new Button("1");
b10 = new Button("2");
b11 = new Button("3");
b12 = new Button("*");
b13 = new Button("0");
b14 = new Button(".");
b15 = new Button("=");
b16 = new Button("/");
f.add(tf, "North");
f.add(p, "Center");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
f.addWindowListener(this);
f.setSize(200, 200);
f.setVisible(true);
} public void actionPerformed(ActionEvent actionevent)
{
String s = actionevent.getActionCommand();
switch(s.charAt(0))
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(denghao)
{
jieguo = 0;
number = 0;
fuhao = '+';
}
Integer integer = new Integer(s);
if(xiaoshudian)
{
jishu = jishu / 10;
number = number + (double)integer.intValue() * jishu;
} else
{
number = number * 10 + (double)integer.intValue();
}
Double double1 = new Double(number);
tf.setText(double1.toString());
xiaoshudian = false;
denghao = false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0) != '=' && denghao)
{
fuhao = s.charAt(0);
denghao = false;
} else
{
switch(fuhao)
{
case '+':
jieguo = jieguo + number;
break; case '-':
jieguo = jieguo - number;
break; case '*':
jieguo = jieguo * number;
break; case '/':
jieguo = jieguo / number;
break;
}
}
xiaoshudian = false;
jishu = 1;
Double double2 = new Double(jieguo);
tf.setText(double2.toString());
if(s.charAt(0) != '=')
{
number = 0;
fuhao = s.charAt(0);
} else
{
denghao = true;
}
break; case '.':
xiaoshudian = true;
break;
}
} public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
}
if(xiaoshudian)
这两句没搞东什么意思啊?为什么这样写?
import java.awt.event.*;
import javax.swing.JTextField;public class Jisuanqi03 extends WindowAdapter
implements ActionListener
{
private double jieguo;
private double number;
private double jishu;
private boolean denghao;
private boolean xiaoshudian;
private char fuhao;
private Frame f;
private JTextField tf;
private Button b1;
private Button b2;
private Button b3;
private Button b4;
private Button b5;
private Button b6;
private Button b7;
private Button b8;
private Button b9;
private Button b10;
private Button b11;
private Button b12;
private Button b13;
private Button b14;
private Button b15;
private Button b16;
private Panel p;
public Jisuanqi03()
{
jieguo = 0;
number = 0;
jishu = 1;
denghao = false;
xiaoshudian = false;
fuhao = '+';
} public static void main(String args[])
{
Jisuanqi03 jisuanqi02 = new Jisuanqi03();
jisuanqi02.go();
} public void go()
{
f = new Frame("计算器测试版 1.3 by xin");
p = new Panel();
p.setLayout(new GridLayout(4, 4));
tf = new JTextField(30);
tf.setHorizontalAlignment(4);
tf.setEditable(false);
b1 = new Button("7");
b2 = new Button("8");
b3 = new Button("9");
b4 = new Button("+");
b5 = new Button("4");
b6 = new Button("5");
b7 = new Button("6");
b8 = new Button("-");
b9 = new Button("1");
b10 = new Button("2");
b11 = new Button("3");
b12 = new Button("*");
b13 = new Button("0");
b14 = new Button(".");
b15 = new Button("=");
b16 = new Button("/");
f.add(tf, "North");
f.add(p, "Center");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
f.addWindowListener(this);
f.setSize(200, 200);
f.setVisible(true);
} public void actionPerformed(ActionEvent actionevent)
{
String s = actionevent.getActionCommand();
switch(s.charAt(0))
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if(denghao)
{
jieguo = 0;
number = 0;
fuhao = '+';
}
Integer integer = new Integer(s);
if(xiaoshudian)
{
jishu = jishu / 10;
number = number + (double)integer.intValue() * jishu;
} else
{
number = number * 10 + (double)integer.intValue();
}
Double double1 = new Double(number);
String temp=new java.text.DecimalFormat().format(double1); //格式化一下输出
tf.setText(temp);
xiaoshudian = false;
denghao = false;
break;
case '+': case '-':case '*':case '/':case '=':
if(s.charAt(0) != '=' && denghao)
{
fuhao = s.charAt(0);
denghao = false;
} else
{
switch(fuhao)
{
case '+':
jieguo = jieguo + number;
break; case '-':
jieguo = jieguo - number;
break; case '*':
jieguo = jieguo * number;
break; case '/':
jieguo = jieguo / number;
break;
}
}
xiaoshudian = false;
jishu = 1;
Double double2 = new Double(jieguo);
tf.setText(double2.toString());
if(s.charAt(0) != '=')
{
number = 0;
fuhao = s.charAt(0);
} else
{
denghao = true;
}
break; case '.':
xiaoshudian = true;
break;
}
} public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
}