From 59046eb972d4da130f7a0f33ca093c82db63c544 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 15 Nov 2024 11:29:44 +0800 Subject: [PATCH] =?UTF-8?q?Calculator=E5=85=BC=E5=AE=B9`x`=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=BD=9C=E4=B8=BA=E4=B9=98=E5=8F=B7=EF=BC=88issue#378?= =?UTF-8?q?7@Github=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/math/Calculator.java | 4 +++ .../hutool/core/math/CalculatorTest.java | 29 +++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/Calculator.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/Calculator.java index d1d8ef476..38a2a2f12 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/math/Calculator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/Calculator.java @@ -16,6 +16,7 @@ package org.dromara.hutool.core.math; +import org.dromara.hutool.core.text.CharUtil; import org.dromara.hutool.core.text.StrUtil; import java.math.BigDecimal; @@ -207,6 +208,9 @@ public class Calculator { arr[i] = '~'; } } + } else if(CharUtil.equals(arr[i], 'x', true)){ + // issue#3787 x转换为* + arr[i] = '*'; } } if (arr[0] == '~' && (arr.length > 1 && arr[1] == '(')) { diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/math/CalculatorTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/math/CalculatorTest.java index 9da3bd327..25c1986eb 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/math/CalculatorTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/math/CalculatorTest.java @@ -16,53 +16,54 @@ package org.dromara.hutool.core.math; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class CalculatorTest { @Test public void conversationTest(){ final double conversion = Calculator.conversion("(0*1--3)-5/-4-(3*(-2.13))"); - Assertions.assertEquals(10.64, conversion, 0); + assertEquals(10.64, conversion, 0); } @Test public void conversationTest2(){ final double conversion = Calculator.conversion("77 * 12"); - Assertions.assertEquals(924.0, conversion, 0); + assertEquals(924.0, conversion, 0); } @Test public void conversationTest3(){ final double conversion = Calculator.conversion("1"); - Assertions.assertEquals(1, conversion, 0); + assertEquals(1, conversion, 0); } @Test public void conversationTest4(){ final double conversion = Calculator.conversion("(88*66/23)%26+45%9"); - Assertions.assertEquals((88D * 66 / 23) % 26, conversion, 0.000000001); + assertEquals((88D * 66 / 23) % 26, conversion, 0.000000001); } @Test public void conversationTest5(){ // https://github.com/dromara/hutool/issues/1984 final double conversion = Calculator.conversion("((1/1) / (1/1) -1) * 100"); - Assertions.assertEquals(0, conversion, 0); + assertEquals(0, conversion, 0); } @Test public void conversationTest6() { final double conversion = Calculator.conversion("-((2.12-2) * 100)"); - Assertions.assertEquals(-1D * (2.12D - 2D) * 100D, conversion, 0.00001); + assertEquals(-1D * (2.12D - 2D) * 100D, conversion, 0.00001); } @Test public void conversationTest7() { //https://gitee.com/dromara/hutool/issues/I4KONB final double conversion = Calculator.conversion("((-2395+0) * 0.3+140.24+35+90)/30"); - Assertions.assertEquals(-15.11D, conversion, 0.01); + assertEquals(-15.11D, conversion, 0.01); } @Test @@ -70,6 +71,16 @@ public class CalculatorTest { // 忽略数字之间的运算符,按照乘法对待。 // https://github.com/dromara/hutool/issues/2964 final double calcValue = Calculator.conversion("(11+2)12"); - Assertions.assertEquals(156D, calcValue, 0.001); + assertEquals(156D, calcValue, 0.001); + } + + @Test + void issue3787Test() { + final Calculator calculator1 = new Calculator(); + double result = calculator1.calculate("0+50/100x(1/0.5)"); + assertEquals(1D, result); + + result = calculator1.calculate("0+50/100X(1/0.5)"); + assertEquals(1D, result); } }