教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 学前教育 >

北邮JAVA第三次作业科学计算器(附源代码)(3)

来源:网络收集 时间:2026-05-16
导读: num1 = num1 - num2; num2 = 0; big_num1 = big_num1.subtract(big_num2); 8 big_num2 = new BigDecimal(0); opflag = false; num_txt = \; break; case \ : num1 = num1 * num2; num2 = 0; big_num1 = big_num1.mu

num1 = num1 - num2; num2 = 0;

big_num1 = big_num1.subtract(big_num2);

8

big_num2 = new BigDecimal(0); opflag = false; num_txt = \; break; case \ :

num1 = num1 * num2; num2 = 0;

big_num1 = big_num1.multiply(big_num2); big_num2 = new BigDecimal(0); opflag = false; num_txt = \;

break; case \ :

if(num2 != 0) {

num1 = num1 / num2; num2 = 0;

big_num1 = big_num1.divide(big_num2,17,BigDecimal.ROUND_HALF_UP); big_num2 = new BigDecimal(0); opflag = false; num_txt = \; }

break; case \ : num1 = Math.pow(num1, num2); num2 = 0; big_num1 = new BigDecimal(Double.toString(num1)); big_num2 = new BigDecimal(0); opflag = false; num_txt = \; break; case \ : num1 = Double.parseDouble(num_txt); num1 = Math.sqrt(num1); num2 = 0; big_num1 = new BigDecimal(Double.toString(num1)); big_num2 = new BigDecimal(0);

num_txt = subZeroAndDot(Double.toString(num1)); break; case \ : num1 = Double.parseDouble(num_txt); num1 = Math.log10(num1); num2 = 0; big_num1 = new BigDecimal(Double.toString(num1)); big_num2 = new BigDecimal(0);

num_txt = subZeroAndDot(Double.toString(num1)); break;

case \ : num1 = Double.parseDouble(num_txt); num1 = Math.log(num1); num2 = 0; big_num1 = new BigDecimal(Double.toString(num1)); big_num2 = new BigDecimal(0);

num_txt = subZeroAndDot(Double.toString(num1)); break;

default: opflag = false; num_txt = \; break; } }

9. 正则表达式去掉字符串多余的0

/**

9

* 使用java正则表达式去掉多余的.与0 * @param s * @return */

public static String subZeroAndDot(String s){ if(s.indexOf(\) > 0){

s = s.replaceAll(\, \);//去掉多余的0

s = s.replaceAll(\, \);//如最后一位是.则去掉 }

return s; } }

四、问题

1. 浮点数精度丢失(已解决)

在计算12.3+0.72时,得到的结果是13.020000000000001。由于数在机器里是以二进制存储, 0.72的二进制长度是无限长,但double位数是有限的,必然会存在精度丢失问题。应该使用BigDecimal类进行计算。

2. 操作数与显示的不同步(已解决)

在程序中一个重要的点就是保持显示的数和内存中的数是相等的,尤其在回删的时候,可能会显示删除运算符,但实际内存中只删掉了操作数的位数,运算符相关变量和标识没有重置。保持显示的操作数的同步是很重要的 3.BigDecimal除不尽报错(已解决)

BigDecimal除法要限制scale不然会报错。精度要大于浮点数的16位。

五、总结

计算器里面小的坑挺多的,看似写完的时候还有一堆事件要处理,,并且程序逻辑需要完整,对各个计算状态的步骤要清晰。

/**

* @author lingnanmiao *

* BUG解决日志

* - BigDecimal除不尽报错

* - 浮点数精度问题,采用了BigDecimal

* - 按下等于后再次输入字符时实际num1与文本框显示不同步 * - Delete时会显示删除运算符实际上没有删除的问题 * - 正则表达式去多余的0 * */

package assignment02;

import java.awt.EventQueue; import java.awt.Font;

import java.awt.event.ActionEvent;

10

…… 此处隐藏:287字,全部文档内容请下载后查看。喜欢就下载吧 ……
北邮JAVA第三次作业科学计算器(附源代码)(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/598714.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)