問題点
iOS電卓アプリを作成しています。
こちらのコードを参考に作成。数値がDouble型のため、整数同士の計算でも小数点が表示されています。
理想としては「8-6=0」
また、小数同士の加算減算を行うと、余計な「0」が表示された状態になっています。
理想としては「12.3-6.1=6.2」
小数同士の乗算除算だと計算結果自体がおかしな状態になっています。
理想としては「8.6×9.2=79.12」
こちらの内容が私の知りたい内容と近しいと思い、こちらを手がかりにググったりコードを足してみたりしたのですが、うまくいきませんでした。
上記の内容を解決するためのアドバイスや方法をご教示いただければ幸いです。
現在のコード(文字数の関係で不要な部分は削除しています)
swift
1 2import UIKit 3 4class ViewController: UIViewController { 5 6 var numberOnScreen:Double = 0 //入力した数字と計算結果 7 var previousNumber:Double = 0 //演算子の前の数字 8 var performingMath = false // 9 var operation = 0 10 var secondNumber = "" //[previousNumber + "演算子"] 11 var percentResult:Double = 0 //%格納用 12 var secondFormula:String = "" // 13 var equalFlag = true //=ボタン押下後のラベル表示結果制御用 14 var equalFlag2 = true //=ボタンを連続で押しても何も計算がされないように制御 15 var decimialFlag = true //計算結果に対して「.」を押すと「0.」にするためのフラグ 16 17 @IBOutlet weak var Result: UILabel! //入力した数字と計算結果表示用 18 @IBOutlet weak var formula: UILabel! //式を表示 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 } 23 24 @IBAction func numbers(_ sender: UIButton) {//0~9までの文字 25 26 decimialFlag = true 27 28 if performingMath == true { 29 30 Result.text = "0" 31 32 if Result.text != "0"{ //計算結果に表示されている数字が0でなければ、直前の数字と入力した数字をつなげる 33 if equalFlag == true{ 34 Result.text = Result.text! + String(sender.tag-1) 35 formula.text = String(secondNumber) + formula.text! + String(sender.tag-1) 36 } 37 else { //=ボタン押した後 38 Result.text = String(sender.tag-1) 39 formula.text = String(sender.tag-1) 40 equalFlag = true 41 } 42 } else { //計算結果に表示されている数字が0であれば、入力した数字に書き換える 43 Result.text = String(sender.tag-1) 44 formula.text = String(secondNumber) + String(sender.tag-1) 45 } 46 47 performingMath = false 48 49 } 50 else { 51 52 if Result.text != "0" { //計算結果に表示されている数字が0でなければ、直前の数字と入力した数字をつなげる 53 if equalFlag == true{//=ボタンの前 54 55 Result.text = Result.text! + String(sender.tag-1) 56 formula.text = formula.text! + String(sender.tag-1) 57 58 } 59 else{//=ボタンの後 60 if Result.text == "0."{ 61 62 Result.text = Result.text! + String(sender.tag-1) 63 formula.text = formula.text! + String(sender.tag-1) 64 equalFlag = true 65 66 }else{ 67 68 Result.text = String(sender.tag-1) 69 formula.text = String(sender.tag-1) 70 equalFlag = true 71 72 } 73 } 74 } else { //計算結果に表示されている数字が0であれば、入力した数字に書き換える 75 Result.text = String(sender.tag-1) 76 formula.text = String(sender.tag-1) 77 } 78 } 79 } 80 81 @IBAction func decimalButton(_ sender: UIButton) { //小数点ボタン 82 83 if decimialFlag == false{ 84 Result.text = "0." 85 formula.text = "0." 86 decimialFlag = true 87 } 88 89 if Result.text == "" { //空白だった時 90 Result.text = "0." 91 } 92 else if Result.text == "+" { 93 Result.text = "+" 94 } 95 else if Result.text == "-" { 96 Result.text = "-" 97 } 98 else if Result.text == "×" { 99 Result.text = "×" 100 } 101 else if Result.text == "÷" { 102 Result.text = "÷" 103 } 104 else { //空白じゃなかった時 105 if (Result.text?.contains("."))!{ 106 Result.text = Result.text! + "" 107 formula.text = formula.text! + "" 108 } 109 else{ 110 Result.text = Result.text! + "." 111 formula.text = formula.text! + "." 112 } 113 } 114 } 115 116 117 @IBAction func calculateButton(_ sender: UIButton) { //演算子の入力 118 //演算子押す前の数字をpreviousNumberに代入 119 if performingMath == false { 120 if operatorCheck == true{ 121 previousNumber = Double(Result.text!)! 122 operatorCheck = false 123 124 if sender.tag == 14 { //÷を押した時 125 Result.text = "÷" //上のラベルに表示 126 formula.text = String(previousNumber) + "÷" //式のラベルに表示 127 } 128 if sender.tag == 15 { //×を押した時 129 Result.text = "×" 130 formula.text = String(previousNumber) + "×" 131 132 } 133 if sender.tag == 16 { //-を押した時 134 Result.text = "-" 135 formula.text = String(previousNumber) + "-" 136 } 137 if sender.tag == 17 { //+を押した時 138 Result.text = "+" 139 formula.text = String(previousNumber) + "+" 140 141 } 142 143 }else{ 144 145 Result.text = "" 146 formula.text = "" 147 148 } 149 150 } 151 152 operation = sender.tag 153 performingMath = true 154 plusminus = false //±の切り替え。次押した時にはマイナスになる 155 percentFormulaFlag = false 156 secondNumber = formula.text! //変数secondNumberに[previousNumber + "演算子"]を代入 157 equalFlag = true 158 equalFlag2 = true 159 plusminusFormulaFlag = true 160 161 } 162 163 @IBAction func anserButton(_ sender: UIButton) { //=ボタンを押した時 164 165 if equalFlag2 == false{ 166 Result.text = Result.text! + "" 167 formula.text = formula.text! + "" 168 }else{ 169 if Result.text == "+"||Result.text == "-"||Result.text == "÷"||Result.text == "×"{ 170 Result.text = Result.text! + "" 171 formula.text = formula.text! + "" 172 } 173 else{ 174 numberOnScreen = Double(Result.text!)!//上のラベルに表示してある数字をDouble型でnumberOnScreenに代入 175 if operation == 14 { //割り算 176 Result.text = String(previousNumber / numberOnScreen) 177 formula.text = secondNumber + String(numberOnScreen) + "=" + String(previousNumber / numberOnScreen) 178 } 179 if operation == 15 { //掛け算 180 Result.text = String(previousNumber * numberOnScreen) 181 formula.text = secondNumber + String(numberOnScreen) + "=" + String(previousNumber * numberOnScreen) 182 } 183 if operation == 16 { //引き算 184 Result.text = String(previousNumber - numberOnScreen) 185 formula.text = secondNumber + String(numberOnScreen) + "=" + String(previousNumber - numberOnScreen) 186 } 187 if operation == 17 { //足し算 188 Result.text = String(previousNumber + numberOnScreen) 189 formula.text = secondNumber + String(numberOnScreen) + "=" + String(previousNumber + numberOnScreen) 190 } 191 } 192 } 193 194 } 195}
回答1件
あなたの回答
tips
プレビュー