注:初学者程序还很是稚嫩,还有很多不足。
出现问题如下,例如要输入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);
    }    

解决方案 »

  1.   

    例如要输入0.6 JTextField显示是0.6000000000000001如果显示有问题的话,将数据转换成字符串,做适当处理后在转换回来。
      

  2.   

    学习ing  if(denghao)
      if(xiaoshudian)
      这两句没搞东什么意思啊?为什么这样写?
      

  3.   

    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);            
                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);
        }