Kotlinアプリ開発 vol.1-2 整数型と浮動小数点型を学ぶ

RM計算機

データの型とは

前回のvol.1-1では整数型に小数をかけてしまった事例を紹介した。

少し事例を振り返ってみる。

val kekka: Intって書いてるぜ!

val hachi: Doubleって書いてるわ!

整数に1.2という小数をかけたので答えも小数になっている

変数の型は Int (整数)から Double (小数)となる

TextView! ってなんだ?

Stringは文字列って意味らしいわ!

指定されたidのTextViewを見つけて、そのtextを置き換える作業を行っている

上記のコードでは整数を代入することはできるが、小数は代入できない

「小数をTextViewに代入する方法を探そう!」

世界中のあらゆる筋肉たちの想いは1つである。

テスト用のアプリを作ってみる

半世紀ほど時代遅れなアプリのデザインが完成した。

とりあえず小数も打ち込めるようにしておいた。

Number: 整数を入力できる

Number (Signed): 符号付きの数字を入力できる

Number (Decimal): 小数を入力できる

Formatすると小数を代入できる

Formatについては以下を参照。

[Kotlin] formatメソッドと指定子の使い方
今回はKotlinのformatメソッドに焦点を当て、その呼び出しと使い方についてお話したいと思います。formatメソッドの呼び出しまずは基本的な記述を見てみましょう。呼び出し方法は2種類あります。println(String.forma

実際のformat部分のコードは以下

                val set_kekkaa = findViewById<TextView>(R.id.tv_double)
                set_kekkaa.text = String.format("Doubleは%.2f", kekkaa)

kekkaaという変数について、小数点以下を2桁まで残して値から文字列に変換したうえでtext部分に代入している

アプリで 1 ÷ 3 をするとき
  • 分子入力欄に 1(text) , 分母入力欄に 3(text)が入力される
  • 2つのtextを文字列に変換して変数(文字列)を定義する
  • 文字列を小数に変換する
  • 小数同士で計算を実行する (1.000… ÷ 3.000… = 0.333… ) ※4 or 8 byte 同士
  • 結果をformatしつつ文字列に変換する
  • 文字列をtextに代入して表示する

めちゃくちゃめんどくさいということが分かった。。。

なんとかアプリが完成!

小数も計算することができた。

MainActivity.ktのコードを見る
package com.example.type_training

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //ボタンを押したときに実行することを決める
        val button = findViewById<Button>(R.id.b_calc)
        button.setOnClickListener {

            //未入力判定用のフラグ まずtrueにしておく
            var isValid = true

            //分子の値を取得
            val get_bunshi = findViewById<EditText>(R.id.e_bunshi)
            val st_bunshi = get_bunshi.text.toString()

            //分子が空欄になっていないかをチェック
            if (st_bunshi.isEmpty()) {
                get_bunshi.error = getString(R.string.e_bunshi_error)
                isValid = false
            }

            //分母の値を取得
            val get_bunbo = findViewById<EditText>(R.id.e_bunbo)
            val st_bunbo = get_bunbo.text.toString()

            //分母が空欄になっていないかをチェック
            if (st_bunbo.isEmpty()) {
                //何回が未入力の場合
                get_bunbo.error = getString(R.string.e_bunbo_error)
                isValid = false
            }

            //0割を禁止
            if (st_bunbo == "0") {
                get_bunbo.error = getString(R.string.e_bunbo_error_0)
                isValid = false
            }

            //双方に値が入っている場合
            if (isValid) {
                //値を文字列型から浮動小数型に変換
                val bunshii = st_bunshi.toDouble()
                val bunboo = st_bunbo.toDouble()

                //計算
                val kekkaa = bunshii / bunboo
                //浮動小数型から整数型に変換
                val kekka = kekkaa.toInt()

                //文字列型に戻して結果を表示
                val set_kekka = findViewById<TextView>(R.id.tv_int)
                set_kekka.text = getString(R.string.set_kekka, kekka)
                val set_kekkaa = findViewById<TextView>(R.id.tv_double)
                set_kekkaa.text = String.format("Doubleは%.2f", kekkaa)

            }
        }
    }
}

特に触れてこなかったが、エラーメッセージも実装している。

まとめ

変数の型(String, Int, Doubleなど)を学んだ
formatによって小数を区切って文字列に変換できることを学んだ
次回はRM計算機をパワーアップさせる (ボタンでも値を増やせるようにする)

コメント

タイトルとURLをコピーしました