编写了这样一个计算器程序//程序文件名为CalculaterGUI.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;public class CalculaterGUI extends JFrame implements ActionListener
{
    JPanel panel = new JPanel();
    JTextField tf = new JTextField();
    String names[] = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
    JButton buttons[] = new JButton[16];
    JButton c = new JButton("C");
    double sum = 0;
    Vector v1 = new Vector(1,1);
    Vector v2 = new Vector(1,1);
    
    public CalculaterGUI(String title)
    {
super(title); tf.setHorizontalAlignment(JTextField.RIGHT);
tf.setEditable(false);
panel.setLayout(new GridLayout(4,4));
getContentPane().add(tf,BorderLayout.NORTH);
getContentPane().add(panel,BorderLayout.CENTER);
getContentPane().add(c,BorderLayout.EAST);

for(int i=0;i<buttons.length;i++)
{
    buttons[i] = new JButton(names[i]);
    panel.add(buttons[i]);
} buttons[0].addActionListener(this);
buttons[1].addActionListener(this);
buttons[2].addActionListener(this);
buttons[3].addActionListener(this);
buttons[4].addActionListener(this);
buttons[5].addActionListener(this);
buttons[6].addActionListener(this);
buttons[7].addActionListener(this);
buttons[8].addActionListener(this);
buttons[9].addActionListener(this);
buttons[10].addActionListener(this);
buttons[11].addActionListener(this);
buttons[12].addActionListener(this);
buttons[13].addActionListener(this);
buttons[14].addActionListener(this);
buttons[15].addActionListener(this);
c.addActionListener(this); setSize(230,180);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); v1.addElement(new String("init"));
v2.addElement(new String("init"));
    }    public void actionPerformed(ActionEvent e)
    {
String str = tf.getText(); if(e.getActionCommand()=="C")
{
    sum = 0;
    tf.setText("");
} if(e.getActionCommand()=="0"||
   e.getActionCommand()=="1"||
   e.getActionCommand()=="2"||
   e.getActionCommand()=="3"||
   e.getActionCommand()=="4"||
   e.getActionCommand()=="5"||
   e.getActionCommand()=="6"||
   e.getActionCommand()=="7"||
   e.getActionCommand()=="8"||
   e.getActionCommand()=="9"||
   e.getActionCommand()==".")
{
    if(
       ("+").equals((String)v1.lastElement())||
       ("-").equals((String)v1.lastElement())||
       ("*").equals((String)v1.lastElement())||
       ("/").equals((String)v1.lastElement())||
       ("init").equals((String)v1.lastElement())
      )
      {
  tf.setText("");
  tf.setText(e.getActionCommand());
      }
    else if(("=").equals((String)v1.lastElement()))
    {
sum = 0;
tf.setText("");
tf.setText(e.getActionCommand());
    }
    else
    {
tf.setText(tf.getText() + e.getActionCommand());
    }
    v1.addElement(new String(e.getActionCommand()));
} if(e.getActionCommand()=="+")
{
    if
    (
     ("+").equals((String)v1.lastElement())||
     ("-").equals((String)v1.lastElement())||
     ("*").equals((String)v1.lastElement())||
     ("/").equals((String)v1.lastElement())||
     ("=").equals((String)v1.lastElement())||
     ("init").equals((String)v1.lastElement())
            )
    {
tf.setText(tf.getText());
    }
    else
    {
double d = Double.parseDouble(str);
if(("+").equals((String)v2.lastElement()))
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
else if(("-").equals((String)v2.lastElement()))
{
    sum = sum - d;
    tf.setText(String.valueOf(sum));
}
else if(("*").equals((String)v2.lastElement()))
{
    sum = sum * d;
    tf.setText(String.valueOf(sum));
}
else if(("/").equals((String)v2.lastElement()))
{
    sum = sum / d;
    tf.setText(String.valueOf(sum));
}
else
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
    }
    v1.addElement(new String(e.getActionCommand()));
    v2.addElement(new String(e.getActionCommand()));
} if(e.getActionCommand()=="-")
{
    if
    (
     ("+").equals((String)v1.lastElement())||
     ("-").equals((String)v1.lastElement())||
     ("*").equals((String)v1.lastElement())||
     ("/").equals((String)v1.lastElement())||
     ("=").equals((String)v1.lastElement())||
     ("init").equals((String)v1.lastElement())
            )
    {
tf.setText(tf.getText());
    }
    else
    {
double d = Double.parseDouble(str);
if(("+").equals((String)v2.lastElement()))
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
else if(("-").equals((String)v2.lastElement()))
{
    sum = sum - d;
    tf.setText(String.valueOf(sum));
}
else if(("*").equals((String)v2.lastElement()))
{
    sum = sum * d;
    tf.setText(String.valueOf(sum));
}
else if(("/").equals((String)v2.lastElement()))
{
    sum = sum / d;
    tf.setText(String.valueOf(sum));
}
else
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
    }
    v1.addElement(new String(e.getActionCommand()));
    v2.addElement(new String(e.getActionCommand()));
} if(e.getActionCommand()=="*")
{
    if
    (
     ("+").equals((String)v1.lastElement())||
     ("-").equals((String)v1.lastElement())||
     ("*").equals((String)v1.lastElement())||
     ("/").equals((String)v1.lastElement())||
     ("=").equals((String)v1.lastElement())||
     ("init").equals((String)v1.lastElement())
            )
    {
tf.setText(tf.getText());
    }
    else
    {
double d = Double.parseDouble(str);
if(("+").equals((String)v2.lastElement()))
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
else if(("-").equals((String)v2.lastElement()))
{
    sum = sum - d;
    tf.setText(String.valueOf(sum));
}
else if(("*").equals((String)v2.lastElement()))
{
    sum = sum * d;
    tf.setText(String.valueOf(sum));
}
else if(("/").equals((String)v2.lastElement()))
{
    sum = sum / d;
    tf.setText(String.valueOf(sum));
}
else
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
    }
    v1.addElement(new String(e.getActionCommand()));
    v2.addElement(new String(e.getActionCommand()));
} if(e.getActionCommand()=="/")
{
    if
    (
     ("+").equals((String)v1.lastElement())||
     ("-").equals((String)v1.lastElement())||
     ("*").equals((String)v1.lastElement())||
     ("/").equals((String)v1.lastElement())||
     ("=").equals((String)v1.lastElement())||
     ("init").equals((String)v1.lastElement())
            )
    {
tf.setText(tf.getText());
    }
    else
    {
double d = Double.parseDouble(str);
if(("+").equals((String)v2.lastElement()))
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
else if(("-").equals((String)v2.lastElement()))
{
    sum = sum - d;
    tf.setText(String.valueOf(sum));
}
else if(("*").equals((String)v2.lastElement()))
{
    sum = sum * d;
    tf.setText(String.valueOf(sum));
}
else if(("/").equals((String)v2.lastElement()))
{
    sum = sum / d;
    tf.setText(String.valueOf(sum));
}
else
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
    }
    v1.addElement(new String(e.getActionCommand()));
    v2.addElement(new String(e.getActionCommand()));
} if(e.getActionCommand()=="=")
{
    if
    (
     ("+").equals((String)v1.lastElement())||
     ("-").equals((String)v1.lastElement())||
     ("*").equals((String)v1.lastElement())||
     ("/").equals((String)v1.lastElement())||
     ("=").equals((String)v1.lastElement())||
     ("init").equals((String)v1.lastElement())
            )
    {
tf.setText(tf.getText());
    }
    else
    {
double d = Double.parseDouble(str);
if(("+").equals((String)v2.lastElement()))
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
else if(("-").equals((String)v2.lastElement()))
{
    sum = sum - d;
    tf.setText(String.valueOf(sum));
}
else if(("*").equals((String)v2.lastElement()))
{
    sum = sum * d;
    tf.setText(String.valueOf(sum));
}
else if(("/").equals((String)v2.lastElement()))
{
    sum = sum / d;
    tf.setText(String.valueOf(sum));
}
else
{
    sum = sum + d;
    tf.setText(String.valueOf(sum));
}
    }
    v1.addElement(new String(e.getActionCommand()));
    v2.addElement(new String(e.getActionCommand()));
}
    }    public static void main(String args[])
    {
new CalculaterGUI("Calculater");
    }
}测试了一些计算都没什么问题,但是算 21.1-7 得到的结果确是14.100000000000001
可能还有别的算式也会出现类似情况,请问有没有人知道这是什么愿意造成的啊?