From c5597cbe6bd25553a92b4c4c6c87c79ad4851b70 Mon Sep 17 00:00:00 2001 From: Jason_Zhao <43213500+JasonAchillious@users.noreply.github.com> Date: Sat, 22 May 2021 22:05:51 +0800 Subject: [PATCH] Update BasicCalculatorActivity.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix issue #96: The value of tan((2k+1)π/2)is not correct --- .../calculator/BasicCalculatorActivity.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/src/main/java/com/duy/ncalc/calculator/BasicCalculatorActivity.java b/app/src/main/java/com/duy/ncalc/calculator/BasicCalculatorActivity.java index 5d24bfb9..fb408518 100644 --- a/app/src/main/java/com/duy/ncalc/calculator/BasicCalculatorActivity.java +++ b/app/src/main/java/com/duy/ncalc/calculator/BasicCalculatorActivity.java @@ -478,10 +478,38 @@ public void onAnimationFinished() { void setState(CalculatorState state) { mCurrentState = state; } + + /** + * When input is tan((2k+1)*Pi/2) the result should be Infinity. + * @param result + * The original result of tan function . + * @return + * If the original result is larger than 1, then return Infinity, + * or return original result. + */ + public String executeTAN(String result){ + int index = result.indexOf('^'); + if(index != -1){ + String firstPart = result.substring(0, index + 1); + String secondPart = result.substring(index + 1, result.length()); + String exponent = result.substring(index + 1, result.length() - 2); + if(Integer.parseInt(exponent) > 1){ + result = "$$Infinity$$"; + } + return result; + } + return result; + } @Override public void onEvaluated(String expr, String result, int resultId) { if (resultId == LogicEvaluator.RESULT_OK) { + //Parse user input to get the function to be executed and operand. + String operator = expr.substring(0,3).toLowerCase(); + String nums = expr.substring(4, expr.length() - 1); + if(operator.equals("tan")){ + result = executeTAN(result); + } if (mCurrentState == CalculatorState.EVALUATE) { onResult(result); saveHistory(expr, result, true);