diff --git a/app/build.gradle b/app/build.gradle index 9d916adc..b249d779 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:178537ae0d' + implementation 'com.github.SimpleMobileTools:Simple-Commons:03e4d214b1' implementation 'me.grantland:autofittextview:0.2.1' implementation 'net.objecthunter:exp4j:0.4.8' diff --git a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt index 63beaa18..9ae38448 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calculator/helpers/CalculatorImpl.kt @@ -6,6 +6,7 @@ import com.simplemobiletools.calculator.models.History import com.simplemobiletools.commons.extensions.showErrorToast import com.simplemobiletools.commons.extensions.toast import net.objecthunter.exp4j.ExpressionBuilder +import java.math.BigDecimal class CalculatorImpl(calculator: Calculator, private val context: Context) { private var callback: Calculator? = calculator @@ -239,7 +240,18 @@ class CalculatorImpl(calculator: Calculator, private val context: Context) { val second = secondValue / 100f ExpressionBuilder("${baseValue.format().replace(",", "")}*${second.format()}").build().evaluate() } else { - ExpressionBuilder(expression.replace(",", "")).build().evaluate() + // avoid Double rounding errors at expressions like 5250,74 + 14,98 + if (sign == "+" || sign == "-") { + val first = BigDecimal.valueOf(baseValue) + val second = BigDecimal.valueOf(secondValue) + val bigDecimalResult = when (sign) { + "-" -> first.minus(second) + else -> first.plus(second) + } + bigDecimalResult.toDouble() + } else { + ExpressionBuilder(expression.replace(",", "")).build().evaluate() + } } if (result.isInfinite() || result.isNaN()) {