新人奮闘記7

iOS入門

前回はUIButtonとの関連付けを行いましたので、今回は、入力や演算をやっていきます。

前回の記事

[入力処理]

先にソースを載せます。

前回の関連付けされた0~9、00、小数点(.) ボタンタップ時に、コールされるメソッドです。

funtouki7_1re

sendar.tagにて、取得したタグ番号(ボタン識別子)をswitchを用いて、0~9ボタン00ボタン、小数点(.)にそれぞれ振り分けてみました。
各変数は、演算はDouble型を検討しましたが、演算結果に誤差が出るため、NSDecimalNumberを採用しました。Double型では、10進数の小数が一部表せない事があり
小数の演算に誤差がでる事があるため、小数を扱う際は有効桁数も多いNSDecimalNumberを使う事で誤差を減らす事ができる。
funtouki7_2
44行目にて初回のアクセスか、どうかを振りわけ、最初に数字ボタンがタップされた時は、入力値を代入し、以降はその文字列を連結して、入力値を作っていきます。

00ボタン押下時の処理で今回は、字数制限を12桁の設計にしたため11文字目に00ボタンにて、0が二つ入力されると、13桁となってしまいます。そこで、現在の入力桁を調べ、11桁目なら一度しか0が連結されない仕組みをとってみました。

小数ボタンが押された時、既に小数でない場合のみ、連結を行っています。

67行目にて入力された文字列を演算に用いるため、入力値をキャストしてfirstNumへ格納しました。

[演算処理]

 

fun7_3re

各演算ボタンと=,Cボタンがタップされた時の処理も同じように、タグ番号で振り分けました。

80行目の自作メソッドを先に載せます

funtouki7_4

初めて四則演算ボタンがタップされた時、opeNumの初期値は0なので、演算は行われず、どの種類の演算が行われるかを保持するだけで、次に演算ボタンが押されるまで、calcメソッドは実行されないようにしました。

 

[出力処理]

先ほどのcalcメソッドはNSDecimalNumber型で演算を行い、その型の演算結果を返すのみなので、出力はされておらず、整形もされていないため、整形し、出力するメソッドを作成してみました。funtouki7_re5

 

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



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム