Practice - mini project w kotlin - Calculator
Ref : https://www.youtube.com/watch?v=uRyvNKRkwbs&t=22211s
주안점
1. CLR -> String("")
2. Operators -> value.contains
3. Split을 통해 앞뒤 숫자 나누기
4. 정수일 경우 소수점처리 없애기 -> substring을 통해 판단 후 각 결과값에 fun 입히기
5. lastNum, lastDot flag 이용
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
var lastNum : Boolean = false
var lastDot : Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
fun onDigit(view: View){
binding.tvInput.append((view as Button).text)
lastNum = true
}
fun onClear(view: View){
binding.tvInput.text = ""
lastNum = false
lastDot = false
}
fun onDecimalPoint(view: View){
if(lastNum && !lastDot){
binding.tvInput.append(".")
lastNum = false
lastDot = true
}
}
fun onEqual(view: View){
if(lastNum){
var tvValue = binding.tvInput.text.toString()
var prefix = ""
try{
if(tvValue.startsWith("-")){
prefix = "-"
tvValue = tvValue.substring(1)
}
if(tvValue.contains("-")){
val spValue = tvValue.split("-")
var one = spValue[0]
var two = spValue[1]
if(!prefix.isEmpty()){
one = prefix + one
}
binding.tvInput.text = removeZeroAfterDot((one.toDouble() - two.toDouble()).toString())
}else if(tvValue.contains("+")){
val spValue = tvValue.split("+")
var one = spValue[0]
var two = spValue[1]
if(!prefix.isEmpty()){
one = prefix + one
}
binding.tvInput.text = removeZeroAfterDot((one.toDouble() + two.toDouble()).toString())
}else if(tvValue.contains("*")){
val spValue = tvValue.split("*")
var one = spValue[0]
var two = spValue[1]
if(!prefix.isEmpty()){
one = prefix + one
}
binding.tvInput.text = removeZeroAfterDot((one.toDouble() * two.toDouble()).toString())
}else if(tvValue.contains("/")){
val spValue = tvValue.split("/")
var one = spValue[0]
var two = spValue[1]
if(!prefix.isEmpty()){
one = prefix + one
}
binding.tvInput.text = removeZeroAfterDot((one.toDouble() / two.toDouble()).toString())
}
}catch(e: ArithmeticException){
e.printStackTrace()
}
}
}
fun onOperator(view: View){
if(lastNum && !isOperatorAdded(binding.tvInput.text.toString())){
binding.tvInput.append((view as Button).text)
lastNum = false
lastDot = false
}
}
private fun removeZeroAfterDot(result: String) : String{
var value = result
if(result.contains(".0"))
value = result.substring(0, result.length - 2)
return value
}
private fun isOperatorAdded(value: String) : Boolean {
return if(value.startsWith("-")){
false
}else{
value.contains("/") || value.contains("*")
|| value.contains("+") || value.contains("-")
}
}
}