Skip to content

Commit

Permalink
fix some formating expression issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Darkempire78 committed Nov 22, 2022
1 parent 179d3c0 commit 9d26dd7
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions app/src/main/java/com/darkempire78/opencalculator/Expression.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@ class Expression {
fun getCleanExpression(calculation: String): String {
var cleanCalculation = replaceSymbolsFromCalculation(calculation)
cleanCalculation = addMultiply(cleanCalculation)
cleanCalculation = formatSquare(cleanCalculation)
cleanCalculation = formatFactorial(cleanCalculation)
if (cleanCalculation.contains('')) {
cleanCalculation = formatSquare(cleanCalculation)
}
if (cleanCalculation.contains('!')) {
cleanCalculation = formatFactorial(cleanCalculation)
}
if (cleanCalculation.contains('%')) {
cleanCalculation = getPercentString(cleanCalculation)
cleanCalculation = cleanCalculation.replace("%", "/100")
}
cleanCalculation = addParenthesis(cleanCalculation)

Expand All @@ -18,7 +23,6 @@ class Expression {
private fun replaceSymbolsFromCalculation(calculation: String): String {
var calculation2 = calculation.replace('×', '*')
calculation2 = calculation2.replace('÷', '/')
calculation2 = calculation2.replace("%", "/100")
calculation2 = calculation2.replace("log", "logten")
calculation2 = calculation2.replace("E", "*10^")
calculation2 = calculation2.replace(NumberFormatter.groupingSeparatorSymbol, "")
Expand All @@ -35,7 +39,7 @@ class Expression {
return calculation
}
// find the last operator before the last %
val operatorBeforePercentPos = calculation.subSequence(0, percentPos - 1).lastIndexOfAny(charArrayOf('-', '+', '×', '÷', '('))
val operatorBeforePercentPos = calculation.subSequence(0, percentPos - 1).lastIndexOfAny(charArrayOf('-', '+', '*', '/', '('))
if (operatorBeforePercentPos < 1) {
return calculation
}
Expand All @@ -51,8 +55,10 @@ class Expression {
return calculationStringFirst + calculation.subSequence(operatorBeforePercentPos, calculation.length)
}
calculationStringFirst = "($calculationStringFirst)"

// modify the calculation to have something like (X)+(Y%*X)
return calculationStringFirst + calculation[operatorBeforePercentPos] + calculationStringFirst + "×(" + calculation.subSequence(operatorBeforePercentPos + 1, percentPos) + ")" + calculation.subSequence(percentPos, calculation.length)
return calculationStringFirst + calculation[operatorBeforePercentPos] + calculationStringFirst + "*(" + calculation.subSequence(operatorBeforePercentPos + 1, percentPos) + ")" + calculation.subSequence(percentPos, calculation.length)

}

private fun addParenthesis(calculation: String): String {
Expand Down Expand Up @@ -96,7 +102,7 @@ class Expression {
cleanCalculationLength ++
}
} else if (cleanCalculation[i] == '!') {
if (i+1 < cleanCalculation.length && (cleanCalculation[i+1] in "123456789(")) {
if (i+1 < cleanCalculation.length && (cleanCalculation[i+1] in "123456789π(")) {
cleanCalculation = cleanCalculation.addCharAtIndex('*', i+1)
cleanCalculationLength ++
}
Expand All @@ -110,7 +116,7 @@ class Expression {
cleanCalculation = cleanCalculation.addCharAtIndex('*', i+1)
cleanCalculationLength ++
}
if (i-1 >= 0 && (cleanCalculation[i-1] in "πe123456789)")) {
if (i-1 >= 0 && (cleanCalculation[i-1] in "%πe123456789)")) {
cleanCalculation = cleanCalculation.addCharAtIndex('*', i)
cleanCalculationLength ++
}
Expand All @@ -119,7 +125,7 @@ class Expression {
cleanCalculation = cleanCalculation.addCharAtIndex('*', i+1)
cleanCalculationLength ++
}
if (i-1 >= 0 && (cleanCalculation[i-1] in "πe123456789)")) {
if (i-1 >= 0 && (cleanCalculation[i-1] in "%πe123456789)")) {
cleanCalculation = cleanCalculation.addCharAtIndex('*', i)
cleanCalculationLength ++
}
Expand Down

0 comments on commit 9d26dd7

Please sign in to comment.