網(wǎng)站首頁 編程語言 正文
關(guān)于計算器的實現(xiàn)在做之前想了幾個方案。
首先是做一個輸入功能,再以后綴表達(dá)式來進(jìn)行計算,但是這個更適用于做一個科學(xué)計算器,在平日生活中的計算器需要一些便捷的計算效果。
所以實現(xiàn)這個計算器使用了將數(shù)字存入Label然后轉(zhuǎn)化String為Int的方式。
算數(shù)符號可以存于一個數(shù)組內(nèi),以數(shù)組自帶的編號來表示運算符,
程序內(nèi)需要儲存的數(shù)字可以簡單的兩個,但是只用兩個數(shù)字以類似 sum1 += sum2的形式會有一些小BUG出現(xiàn),所以中間加了一個過渡數(shù)字。
計算器里有三個布爾類型的值來分別判斷:之前是否輸入過等于號,這個數(shù)字是否是負(fù)數(shù),以及是否輸入過操作符號。(等于號的判斷是為了查看過度數(shù)字應(yīng)該取哪個值,是否輸入過加減號可以讓等于結(jié)果之后按數(shù)字就可以進(jìn)入下一個運算。)
這個計算器可以實現(xiàn)一些比較簡單的運算,運算符的優(yōu)先級并未作出判定,但是還是很適用于生活中的運算。
這個計算機(jī)的小bug就是在每輸入兩個數(shù)字進(jìn)行運算后必須按等于號,不能以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//判斷是否負(fù)數(shù) ? ? var isControl:Bool = false//判斷是否輸入操作符 ? ? var input:Double = 0.0//存儲輸入數(shù)字 ? ? var lastRes:Double = 0.0//存儲過度數(shù)字 ? ? 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) { ? ? ? ? //取數(shù)字 ? ? ? ? if isMinus {//取負(fù)數(shù)后下次顯示區(qū)清零 ? ? ? ? ? ? resultsum.text = "0" ? ? ? ? } ? ? ? ? if isControl{//輸入運算符后下次顯示區(qū)清零 ? ? ? ? ? ? resultsum.text = "0" ? ? ? ? } ? ? ? ? if(resultsum.text! != "0"){ ? ? ? ? ? ? resultsum.text! += String(sender.tag) ? ? ? ? }else{ ? ? ? ? ? ? resultsum.text! = String(sender.tag) ? ? ? ? } ? ? ? ? input = (resultsum.text! as NSString).doubleValue ? ? ? ? //獲得數(shù)字并存儲 ? ? ? ? isEq = false ? ? ? ? isMinus = false ? ? ? ? isControl = false ? ? } ? ? @IBAction func touchPoint(_ sender: UIButton) { ? ? ? ? resultsum.text! += "." ? ? ? ? //加入小數(shù)點 ? ? } ? ? @IBAction func touchMinus(_ sender: UIButton) { ? ? ? ? //負(fù)數(shù)操作 ? ? ? ? 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 ? ? ? ?? ? ? } ? ?? }
原文鏈接:https://blog.csdn.net/weixin_44729676/article/details/89791736
相關(guān)推薦
- 2023-04-22 關(guān)于Python字典的底層實現(xiàn)原理_python
- 2022-04-11 springboot上傳文件到Nginx代理的FTP文件服務(wù)器
- 2022-05-16 批處理copy命令的具體使用_DOS/BAT
- 2022-09-08 Go語言中的Struct結(jié)構(gòu)體_Golang
- 2022-08-16 一文輕松了解Python中類的繼承_python
- 2022-08-17 Python字典查找數(shù)據(jù)的5個基礎(chǔ)操作方法_python
- 2024-07-15 項目開發(fā)中使用Date和LocalDateTime處理日期
- 2022-12-29 一文帶你了解Go語言中方法的調(diào)用_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支