'Kotlin calculator using double data type

I am learning Kotlin and can't seem to make sense of the different data types. I have a simple calculator app that currently adds or subtracts whole integers.

I am trying to make it possible to use "." to also calculate decimals. I've tried a number of things to convert the number to Double and don't think I am understanding the data types properly. I can get it to work explicitly with integers.

The closest I got to double was working but it automatically appended a zero after the decimal

package com.example.calctest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*

enum class CalculatorMode {
    None,Add,Subtract
}

class MainActivity : AppCompatActivity() {

    var lastButtonMode = false
    var currentMode = CalculatorMode.None
    var labelString = ""
    var savedNum = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupCalculator()
    }

    fun setupCalculator() {
        val buttons = arrayOf(button_zero, button_1, button_2, button_3, button_4, button_5, button_6, button_7, button_8, button_9)
        for(i in buttons.indices) {
            buttons[i].setOnClickListener { calcNum(i) }
        }
        button_dot.setOnClickListener { calcDecimal() }
        button_addition.setOnClickListener { changeMode(CalculatorMode.Add) }
        button_subtraction.setOnClickListener { changeMode(CalculatorMode.Subtract) }
        button_equals.setOnClickListener { calcEqual() }
        button_clear.setOnClickListener { calcClear() }
    }

    fun calcEqual() {
        if (lastButtonMode) {
            return
        }

        val labelInt = labelString.toInt()

        when(currentMode) {
            CalculatorMode.Add -> savedNum += labelInt
            CalculatorMode.Subtract -> savedNum -= labelInt
            CalculatorMode.None -> return
        }

        currentMode = CalculatorMode.None
        labelString = "$savedNum"
        updateNumString()
        lastButtonMode = true
    }

    fun calcClear() {
        lastButtonMode = false
        currentMode = CalculatorMode.None
        labelString = ""
        savedNum = 0
        textView.text = "0"
    }

    fun updateNumString() {
        val labelInt = labelString.toInt()
        labelString = labelInt.toString()

        if(currentMode == CalculatorMode.None) {
            savedNum = labelInt
        }

        textView.text = labelString
    }

    fun changeMode(mode: CalculatorMode) {
        if(savedNum == 0) {
            return
        }
        currentMode = mode
        lastButtonMode = true
    }

    fun calcNum(num: Int) {
        val strVal = num.toString()

        if (lastButtonMode) {
            lastButtonMode = false
            labelString = "0"
        }

        labelString = "$labelString$strVal"
        updateNumString()
    }

    fun calcDecimal() {
        if(labelString.contains(".")) {
            return
        } else {
            labelString = "$labelString."
        }
        val labelDouble = labelString.toDouble()
        labelString = labelDouble.toString()
        textView.text = labelString
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source