
一、应用概述1.1 应用简介计算器Calculator是一款功能完整的科学计算器应用。支持加减乘除四则运算、连续运算、历史记录、内存存储等功能。该应用深入展示了ArkTS框架中的表达式解析算法、状态驱动的UI更新、历史记录管理和边界条件处理技术。1.2 核心功能功能模块功能描述技术实现数字输入多位数字和浮点数字符串拼接四则运算加减乘除运算运算引擎连续运算多步连续计算状态保持历史记录计算历史查看数组存储内存功能MC/MR/M/M-独立存储清空功能C/CE/退格状态重置二、运算引擎2.1 核心算法classCalculatorEngine{privatedisplay:string0;privatepreviousValue:number0;privatecurrentValue:string;privateoperator:string;privateisNewInput:booleantrue;privatememory:number0;privatehistory:string[][];inputDigit(digit:string):void{if(this.isNewInput){this.currentValuedigit;this.displaydigit;this.isNewInputfalse;}else{if(this.currentValue.length15)return;this.currentValuedigit;this.displaythis.currentValue;}}inputDecimal():void{if(this.isNewInput){this.currentValue0.;this.display0.;this.isNewInputfalse;return;}if(this.currentValue.includes(.))return;this.currentValue.;this.displaythis.currentValue;}performOperation(op:string):void{if(this.operator!this.isNewInput){this.calculate();}else{this.previousValueparseFloat(this.display);}this.operatorop;this.isNewInputtrue;}calculate():void{constcurrentparseFloat(this.currentValue);letresult0;switch(this.operator){case:resultthis.previousValuecurrent;break;case-:resultthis.previousValue-current;break;case×:resultthis.previousValue*current;break;case÷:resultcurrent!0?this.previousValue/current:0;break;}this.displayresult.toString();this.previousValueresult;this.currentValueresult.toString();this.history.push(this.previousValue this.operator current result);}}三、UI布局设计3.1 按钮网格build(){Column(){// 显示区域Text(this.display).fontSize(40).textAlign(TextAlign.End).width(90%).padding(10)// 功能按钮行Row(){ForEach([MC,MR,M,M-],(btn:string){Button(btn).fontSize(12).width(60).height(40).onClick(()this.memoryOperation(btn))})}// 数字按钮ForEach(this.buttons,(row:string[]){Row(){ForEach(row,(btn:string){Button(btn).width(btn0?130:60).height(55).fontSize(22).backgroundColor(this.getButtonColor(btn)).fontColor(this.getButtonTextColor(btn)).borderRadius(12).margin(3).onClick(()this.onButtonClick(btn))})}})}}四、边界条件处理4.1 异常处理handleEdgeCases():void{// 除零处理if(this.operator÷parseFloat(this.currentValue)0){this.displayError;this.resetState();return;}// 数值溢出if(this.display.length15){this.displayparseFloat(this.display).toExponential(6);}// 连续小数点if(this.currentValue.includes(.)this.lastInput.)return;}五、总结5.1 核心技术运算引擎算法状态驱动的UI边界条件处理历史记录管理内存存储功能5.2 扩展方向科学计算功能进制转换单位换算集成表达式历史自定义主题