新人奮闘記7
iOS入門
前回はUIButtonとの関連付けを行いましたので、今回は、入力や演算をやっていきます。
[入力処理]
先にソースを載せます。
前回の関連付けされた0~9、00、小数点(.) ボタンタップ時に、コールされるメソッドです。
sendar.tagにて、取得したタグ番号(ボタン識別子)をswitchを用いて、0~9ボタン00ボタン、小数点(.)にそれぞれ振り分けてみました。
各変数は、演算はDouble型を検討しましたが、演算結果に誤差が出るため、NSDecimalNumberを採用しました。Double型では、10進数の小数が一部表せない事があり
小数の演算に誤差がでる事があるため、小数を扱う際は有効桁数も多いNSDecimalNumberを使う事で誤差を減らす事ができる。
44行目にて初回のアクセスか、どうかを振りわけ、最初に数字ボタンがタップされた時は、入力値を代入し、以降はその文字列を連結して、入力値を作っていきます。
00ボタン押下時の処理で今回は、字数制限を12桁の設計にしたため11文字目に00ボタンにて、0が二つ入力されると、13桁となってしまいます。そこで、現在の入力桁を調べ、11桁目なら一度しか0が連結されない仕組みをとってみました。
小数ボタンが押された時、既に小数でない場合のみ、連結を行っています。
67行目にて入力された文字列を演算に用いるため、入力値をキャストしてfirstNumへ格納しました。
[演算処理]
各演算ボタンと=,Cボタンがタップされた時の処理も同じように、タグ番号で振り分けました。
80行目の自作メソッドを先に載せます
初めて四則演算ボタンがタップされた時、opeNumの初期値は0なので、演算は行われず、どの種類の演算が行われるかを保持するだけで、次に演算ボタンが押されるまで、calcメソッドは実行されないようにしました。
[出力処理]
先ほどのcalcメソッドはNSDecimalNumber型で演算を行い、その型の演算結果を返すのみなので、出力はされておらず、整形もされていないため、整形し、出力するメソッドを作成してみました。
formatTextOutメソッドがコールされた時、演算結果はNSDecimalNumber型なので、結果が無限小数等の場合、桁を丸めなければ12桁制限のため0.0….のみの出力になってしまいます。
そこで150行目にて小数第11にて桁をあげる事にしました。
例えば1÷3は0.333….となりますが
0.3333……4と出力されるようになります。
同じように1÷3×3は0.999….ではなく1と出力されるようになりました。
また、小数点が含まれている文字列は(.)を含めると13文字となり桁数は11桁になってしまいます。
なので159行目のif文にて小数点かマイナス値が含まれているか、さらに文字数をチェックし、
先頭から12桁になるよう文字列を切り出す事にしました。
[まとめ]
- 小数を扱う演算等を行う時は、Double型よりNSDecimalNumberを使う
- 共通処理として行いたいときはオブジェクトにtag番号を設定することで識別ができる
- UIボタンのアクションを定義するために特殊関数IBActionを利用することによりStorybordから紐づけができる
次回の目標
オートレイアウトで画面を作成していきたいと思います。
keny
admin at 2016年08月04日 10:00:30