'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 |
|---|
