关于计算器的实现在做之前想了几个方案。
首先是做一个输入功能,再以后缀表达式来进行计算,但是这个更适用于做一个科学计算器,在平日生活中的计算器需要一些便捷的计算效果。
所以实现这个计算器使用了将数字存入label然后转化string为int的方式。
算数符号可以存于一个数组内,以数组自带的编号来表示运算符,
程序内需要储存的数字可以简单的两个,但是只用两个数字以类似 sum1 = sum2的形式会有一些小bug出现,所以中间加了一个过渡数字。
计算器里有三个布尔类型的值来分别判断:之前是否输入过等于号,这个数字是否是负数,以及是否输入过操作符号。(等于号的判断是为了查看过度数字应该取哪个值,是否输入过加减号可以让等于结果之后按数字就可以进入下一个运算。)
这个计算器可以实现一些比较简单的运算,运算符的优先级并未作出判定,但是还是很适用于生活中的运算。
这个计算机的小bug就是在每输入两个数字进行运算后必须按等于号,不能以a b c …………的形式计算,只能用于a b = ?
// // viewcontroller.swift // calculator // // created by cqupt-zhx on 2019/4/27. // d88尊龙官网手机app copyright © 2019 cquptzhx. all rights reserved. // import uikit import darwin class viewcontroller: uiviewcontroller { var priority = [" ","-","*","÷","="] var iseq:bool = false//判断是否输入等于号 var isminus:bool = false//判断是否负数 var iscontrol:bool = false//判断是否输入操作符 var input:double = 0.0//存储输入数字 var lastres:double = 0.0//存储过度数字 var res:double = 0.0//存储a答案 var fh:int = 0//符号tag var math:int = 0//运算符tag @iboutlet weak var resultsum: uilabel! override func viewdidload() { super.viewdidload() // do any additional setup after loading the view. } @ibaction func takesum(_ sender: uibutton) { //取数字 if isminus {//取负数后下次显示区清零 resultsum.text = "0" } if iscontrol{//输入运算符后下次显示区清零 resultsum.text = "0" } if(resultsum.text! != "0"){ resultsum.text! = string(sender.tag) }else{ resultsum.text! = string(sender.tag) } input = (resultsum.text! as nsstring).doublevalue //获得数字并存储 iseq = false isminus = false iscontrol = false } @ibaction func touchpoint(_ sender: uibutton) { resultsum.text! = "." //加入小数点 } @ibaction func touchminus(_ sender: uibutton) { //负数操作 if (res == 0){ equal(sender) res = -input } else{ res = -res } resultsum.text = string(res) isminus = true } @ibaction func equal(_ sender: uibutton) { //等号运算 switch(fh) { case 1: res = lastres input case 2: res = lastres - input case 3: res = lastres * input case 4: res = lastres / input default: break } resultsum.text! = "\(res)" lastres = res iseq = true iscontrol = true } @ibaction func backc(_ sender: uibutton) { //删除上一个字符 if resultsum.text?.count == 1 { resultsum.text = "0" } else if (resultsum.text! as nsstring).doublevalue != 0 { resultsum.text?.removelast() } input = (resultsum.text! as nsstring).doublevalue } @ibaction func getsign(_ sender: uibutton) { //输入运算符 if sender.tag < 5 { resultsum.text! = priority[sender.tag - 1] if iseq { lastres = res } else { lastres = input } } fh = sender.tag iscontrol = true } @ibaction func touchclean(_ sender: uibutton) { //清空所有储存 res = 0 lastres = 0 input = 0 resultsum.text = "0" iscontrol = false } @ibaction func touchmath(_ sender: uibutton) { //便捷运算 math = sender.tag if(res == 0){ res = input } switch(math){ case 7: res = res * 3.14 case 8: res = res * res case 9: res = sin(res) case 10: res = cos(res) default: break } resultsum.text! = "\(res)" lastres = res iseq = true } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。