java代码-我用java写了一个简易计算器的程序,但是有时候结果不正确

问题描述

我用java写了一个简易计算器的程序,但是有时候结果不正确

就是有时候计算结果后面会显示很多9或者0 ,比如计算8.3-2.1时,请问大神怎么解决啊?
我是菜菜鸟,程序如下:
//Calculator.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame
{
private JPanel p1=new JPanel();
private JButton numberButton[]=new JButton[10];
private String buttonName[]={"1","2","3","4","5","6","7","8","9","0"};
private JButton plusButton;
private JButton subButton;
private JButton mulButton;
private JButton divButton;
private JButton pointButton;
private JButton calButton;
private JTextField tf=new JTextField("");
private String add1="";
private String add2="";
private String output="";
private double Result;
private boolean Op=false;
private boolean OpClicked=false;
private int Option=0;
public keshihua2(){
super("简易计算器");
getContentPane().setLayout(new BorderLayout());
p1.setLayout(new GridLayout(4,4,10,10));
p1.setBounds(10,10,230,120);
for(int i=0;i<10;i++)
{

numberButton[i]=new JButton(buttonName[i]);
numberButton[i].addActionListener(new Number());
p1.add(numberButton[i]);
}
plusButton=new JButton("+");
plusButton.addActionListener(new Plus());
p1.add(plusButton);

  subButton=new JButton("-");
  subButton.addActionListener(new sub());
  p1.add(subButton);

  mulButton=new JButton("*");
  mulButton.addActionListener(new mul());
  p1.add(mulButton);

  divButton=new JButton("/");
  divButton.addActionListener(new div());
  p1.add(divButton);

  pointButton=new JButton(".");
  pointButton.addActionListener(new point());
  p1.add(pointButton);

  calButton=new JButton("=");
  calButton.addActionListener(new Cal());
  p1.add(calButton);
  getContentPane().add(p1,BorderLayout.CENTER);

  tf.setBounds(10,150,230,20);
  tf.setHorizontalAlignment(JTextField.RIGHT);
  getContentPane().add(tf,BorderLayout.NORTH);
  validate();
  setSize(240,200);
  setLocation(400,200);
  setResizable(false);
  setVisible(true);
}
class Number implements ActionListener               //数字键的监听
{
   public void actionPerformed(ActionEvent e)
    {
        if(!OpClicked)
        {
           add1+=e.getActionCommand();
           output=""+add1;
           tf.setText(output);
        }
        else
        {
           add2+=e.getActionCommand();
           output+=e.getActionCommand();
           tf.setText(output);
        }
     }
  }
 class Plus implements ActionListener        //加号的监听
  {
        public void actionPerformed(ActionEvent e)
        {
          OpClicked=!OpClicked;
          Op=!Op;
          Option=1;
          output+=" + ";
          tf.setText(output);
         }
   }
 class sub implements ActionListener        //减号的监听
 {
    public void actionPerformed(ActionEvent e)
        {
          OpClicked=!OpClicked;
          Op=!Op;
          Option=2;
          output+=" - ";
          tf.setText(output);
         }
  }
 class mul implements ActionListener       //乘号的监听
 {
    public void actionPerformed(ActionEvent e)
        {
          OpClicked=!OpClicked;
          Op=!Op;
          Option=3;
          output+=" * ";
          tf.setText(output);
         }
  }
 class div implements ActionListener       //除号的监听
 {
    public void actionPerformed(ActionEvent e)
        {
          OpClicked=!OpClicked;
          Op=!Op;
          Option=4;
          output+=" / ";
          tf.setText(output);
         }
  }
 class point implements ActionListener       //小数点的监听
 {
    public void actionPerformed(ActionEvent e)
        {
          if(!Op){
              add1+=".";
          }
          else{
              add2+=".";
              output+=".";
          }
        }
  }
 class Cal implements ActionListener       //等号的监听
  {
     public void actionPerformed(ActionEvent e)
     {switch(Option){
     case 1:
         Result=Double.parseDouble(add1)+Double.parseDouble(add2);break;
     case 2:
         Result=Double.parseDouble(add1)-Double.parseDouble(add2);break;
     case 3:
         Result=Double.parseDouble(add1)*Double.parseDouble(add2);break;
     case 4:
         Result=Double.parseDouble(add1)/Double.parseDouble(add2);break;
     default:Option=0;}
         output+=" = ";
         tf.setText(output+Double.toString(Result));
         OpClicked=false;
         Op=false;
         add1="";
         add2="";
      }
   }
 public static void main(String args[])
  {
     keshihua2 calculator=new keshihua2();
     calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

}

解决方案

由于double计算有误差,误差范围内都认为是正确的。
要得到精确的double值输出可以:
1.用String.format("%.2f", Result);格式化输出,其中.2表示保留小数点后2位(四舍五入后),可以根据你的输入确定该保留小数点后几位。不过这个方法在除法的时候大多时候只能得到近似值。
2.自已用INT实现double的运算。

时间: 2024-09-09 07:41:15

java代码-我用java写了一个简易计算器的程序,但是有时候结果不正确的相关文章

业余爱好,非jiava开发人员,自学java有半年多,写了一个UI计算器

问题描述 [size=16px]业余爱好,非jiava开发人员,出于想转行的心态,自学java有半年多,刚写了一个UI计算器,用了一部分awt内容,大部分都是用if...else,while结构,虽然可以实现连续加减乘除.简单混合运算,可一看自己的程序里到处是if...else.while,我就瞬间觉得太低端了,总觉得不怎么样,请问我这个想法对吗?各位大神们求解啊!! 解决方案 解决方案二:我个人觉得ifwhile是最nb的,如果代码里面密密麻麻都是ifwhile,而且不出错,说明你很nb了解决

c语言-C语言写的一个实时时间小程序,用的多线程屏幕问题

问题描述 C语言写的一个实时时间小程序,用的多线程屏幕问题 这是一个子程序,我想把这个调试好了加到另一个工程里,因为要实时显示时间,所以用到了多线程,现在的问题是子线程执行的时候 光标就移动到这行后面,主线程再打印什么东西的时候,屏幕显示就乱套了,怎么能解决啊,下面是代码片段. void real_time(int X,int Y) //显示时间的函数,用到了光标移动函数,X,Y表示坐标 { HideCursor(10, 0); //隐藏光标函数 hout = GetStdHandle(STD_

求救大神,我用android studio开发的项目,删除后能恢复找到不、我写了一个多月的程序

问题描述 求救大神,我用android studio开发的项目,删除后能恢复找到不.我写了一个多月的程序 如题,我写了一个多月的程序,今天不小心点右键删除了项目.请问一下大神有办法恢复没?我在百度上到处找也没有相关的解答.谢谢了啊. 解决方案 试试这个 http://www.xiazaiba.com/html/591.html 个人觉得数据恢复中比较好的

关于注册安装问题我 我们写了一个管理类的程序 发布了一个安装程序.

问题描述 关于注册安装问题我 我们写了一个管理类的程序 发布了一个安装程序. 关于注册安装问题我 我们写了一个管理类的程序 发布了一个安装程序 刚开始是免费试用7天 但是如果你今天安装了 没到7天 你重新卸载了 再次安装 又有七天了 这个问题该怎么解决呢????. 解决方案 在程序运行的时候往文件系统或者注册表中某个角落写一个值.卸载程序不知道,再次安装,运行后你去判断下,发现有了,就不让用. 还有就是在线验证,将用户信息记录在服务器上.可以用手机短信验证. 解决方案二: 这个有一个就是你安装的

java代码-我用Java 写的一个简单截图小工具 但是出现一些在重截时出现bug 跪求大神

问题描述 我用Java 写的一个简单截图小工具 但是出现一些在重截时出现bug 跪求大神 /**在这里贴上我注释满满的代码 求一语道破 求建议 求批评 没有贴main 方法 随便写个main方法便可运行 */ ` package com.subimaga; import java.awt.AWTException; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Cursor; import java.

java 集合-求大神,发一个简易的银行系统代码,谢谢 急急急!!!

问题描述 求大神,发一个简易的银行系统代码,谢谢 急急急!!! 用txt存取用户信息,把用户信息放到ArrayList集合进行操作 包含 开户 存款 转账 谢谢 急急急!!! 解决方案 ArrayList用法: ArrayList是接口List的实现类,所以推荐以List接口来使用. 1.创建ArrayList的List接口 例: List books = new ArrayList(); Java支持泛形后,创建的同时可以指定元素的类型. 例: Class Book { ...... } Li

诊断Java代码: 轻松掌握Java泛型

J2SE 1.5 - 代号为 Tiger - 计划在 2003 年年底发布.我一直都热衷于尽可能多地收集有关即将推出的新技术的预告信息,因此我将撰写一系列的文章,讨论可从 V1.5 中获得的新的和经过重组的特性,本文是第一篇.我特别想谈谈泛型类型并重点讲述在 Tiger 中为了支持它们而进行的更改和调整. 在许多方面,Tiger 肯定是迄今为止在 Java 编程方面(包括对源语言语法的重大扩展)所取得的最大进步.Tiger 中计划进行的最显著的变化是添加泛型类型,正如在 JSR-14 原型编译器

java代码-急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩

问题描述 急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩 //子弹Bullet类 package hy; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; public class Bullet { //坐标 public int x,y; //子弹大小 public int width,height; //子弹杀伤力 public int kill; //速度

简单写了一个Android计算器,事件处理代码一团糟,该如何优化?

问题描述 大家好:刚刚开始学习Android开发,写了一个简单的计算器,主要是为了熟悉界面布局和事件处理.我写的代码很蠢,在一个主Activity中,一个按钮添加一个事件,请问有什么好的模式可以优化一下这种代码,谢谢!package com.wondershare.calculator;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.view.View