Kotlin计算器,带百分比



好的,我在Kotlin创建了一个计算器,我正在努力计算百分比。我知道如何计算百分比。我想我把代码搞砸了。我想做的是,当我键入示例10时,%的答案应该是1。

现在,当我键入相同的10,然后是%时,它会变为0…然而,如果我键入10,然后命中等于,然后命中%,它会给我1…我做错了什么。

private fun onInstantOperationButtonClick(operation: String) {
var currentValue: String = textViewCurrentNumber.text.toString()
var thisOperationNumber: Double = formatStringToDouble(currentValue)
currentValue = "(${formatDoubleToString(thisOperationNumber)})"
when (operation) {
PERCENTAGE -> {
thisOperationNumber = (currentResult * thisOperationNumber) / 100
currentValue = formatDoubleToString(thisOperationNumber)
}
ROOT -> thisOperationNumber = thisOperationNumber.sqrt
SQUARE -> thisOperationNumber *= thisOperationNumber
FRACTION -> thisOperationNumber = 1 / thisOperationNumber
}
if (isInstantOperationButtonClicked) {
historyInstantOperationText = "($historyInstantOperationText)"
historyInstantOperationText = StringBuilder().append(operation).append(historyInstantOperationText).toString()
textViewHistoryText.text = if (isEqualButtonClicked) historyInstantOperationText else StringBuilder().append(historyText).append(currentOperation).append(historyInstantOperationText).toString()
} else if (isEqualButtonClicked) {
historyInstantOperationText = StringBuilder().append(operation).append(currentValue).toString()
textViewHistoryText.text = historyInstantOperationText
} else {
historyInstantOperationText = StringBuilder().append(operation).append(currentValue).toString()
textViewHistoryText.text = StringBuilder().append(historyText).append(currentOperation).append(historyInstantOperationText).toString()
}
textViewCurrentNumber.text = formatDoubleToString(thisOperationNumber)
if (isEqualButtonClicked) currentResult = thisOperationNumber else currentNumber = thisOperationNumber
isInstantOperationButtonClicked = true
isFutureOperationButtonClicked = false
}

currentResult是历史,currentValue是等式的答案。我的计算器是一个顶部方程式和底部答案。

任何诊断我的代码的帮助都会有所帮助。此外,根、平方和分数也能完美地工作。

好吧,多亏了@cachtustictacs,他为我指明了错误的正确方向。我对原始代码进行了编码,它必须返回一个恰好是0的值,所以我更改了代码,删除了When(),使其百分比与自身隔离。然后像根、分数和平方一样进行转换。然后它完美地工作了。

private fun onInstantOperationButtonClick(operation: String) {
var currentValue: String = textViewCurrentNumber.text.toString()
var thisOperationNumber: Double = formatStringToDouble(currentValue)
currentValue = "(${formatDoubleToString(thisOperationNumber)})"
when (operation) {
PERCENTAGE -> thisOperationNumber = currentNumber / 100
ROOT -> thisOperationNumber = thisOperationNumber.sqrt
SQUARE -> thisOperationNumber *= thisOperationNumber
FRACTION -> thisOperationNumber = 1 / thisOperationNumber
}
if (isInstantOperationButtonClicked) {
historyInstantOperationText = "($historyInstantOperationText)"
historyInstantOperationText = StringBuilder().append(operation).append(historyInstantOperationText).toString()
textViewHistoryText.text = if (isEqualButtonClicked) historyInstantOperationText else StringBuilder().append(historyText).append(currentOperation).append(historyInstantOperationText).toString()
} else if (isEqualButtonClicked) {
historyInstantOperationText = StringBuilder().append(operation).append(currentValue).toString()
textViewHistoryText.text = historyInstantOperationText
} else {
historyInstantOperationText = StringBuilder().append(operation).append(currentValue).toString()
textViewHistoryText.text = StringBuilder().append(historyText).append(currentOperation).append(historyInstantOperationText).toString()
}
textViewCurrentNumber.text = formatDoubleToString(thisOperationNumber)
if (isEqualButtonClicked) currentResult = thisOperationNumber else currentNumber = thisOperationNumber
isInstantOperationButtonClicked = true
isFutureOperationButtonClicked = false

}

所以我的数学算出来了。可能有一个更简单的方法,但这对我有效。

最新更新