This commit is contained in:
Looly
2020-09-17 11:26:14 +08:00
parent 6b89c841d3
commit 85601e2446
5 changed files with 32 additions and 29 deletions

View File

@@ -1,6 +1,7 @@
package cn.hutool.core.math;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import java.math.BigDecimal;
import java.util.Collections;
@@ -25,28 +26,21 @@ public class Calculator {
* @return 计算结果
*/
public static double conversion(String expression) {
double result;
Calculator cal = new Calculator();
try {
expression = transform(expression);
result = cal.calculate(expression);
} catch (Exception e) {
// e.printStackTrace();
// 运算错误返回NaN
return Double.NaN;
}
// return new String().valueOf(result);
return result;
final Calculator cal = new Calculator();
expression = transform(expression);
return cal.calculate(expression);
}
/**
* 将表达式中负数的符号更改
*
* @param expression 例如-2+-1*(-3E-2)-(-1) 被转为 ~2+~1*(~3E~2)-(~1)
* @return 更改后的表达式
* @return 转换后的字符串
*/
private static String transform(String expression) {
char[] arr = expression.toCharArray();
expression = StrUtil.cleanBlank(expression);
expression = StrUtil.removeSuffix(expression, "=");
final char[] arr = expression.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '-') {
if (i == 0) {

View File

@@ -10,4 +10,10 @@ public class CalculatorTest {
final double conversion = Calculator.conversion("(0*1--3)-5/-4-(3*(-2.13))");
Assert.assertEquals(10.64, conversion, 2);
}
@Test
public void conversationTest2(){
final double conversion = Calculator.conversion("77 * 12");
Assert.assertEquals(924.0, conversion, 2);
}
}