文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用swift实现计算器功能

2024-04-02 19:55

关注

关于计算器的实现在做之前想了几个方案。

首先是做一个输入功能,再以后缀表达式来进行计算,但是这个更适用于做一个科学计算器,在平日生活中的计算器需要一些便捷的计算效果。

所以实现这个计算器使用了将数字存入Label然后转化String为Int的方式。

算数符号可以存于一个数组内,以数组自带的编号来表示运算符,
程序内需要储存的数字可以简单的两个,但是只用两个数字以类似 sum1 += sum2的形式会有一些小BUG出现,所以中间加了一个过渡数字。

计算器里有三个布尔类型的值来分别判断:之前是否输入过等于号,这个数字是否是负数,以及是否输入过操作符号。(等于号的判断是为了查看过度数字应该取哪个值,是否输入过加减号可以让等于结果之后按数字就可以进入下一个运算。)

这个计算器可以实现一些比较简单的运算,运算符的优先级并未作出判定,但是还是很适用于生活中的运算。

这个计算机的小bug就是在每输入两个数字进行运算后必须按等于号,不能以a+b+c+…………的形式计算,只能用于a + b = ?

//
//  ViewController.swift
//  Calculator
//
//  Created by CQUPT-ZHX on 2019/4/27.
//  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
        
    }
    
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯