mysql BigDecimal 加减乘除

 工具类:

package com.hgfr.gfs.common.util;

import com.alibaba.druid.util.StringUtils;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author coffeesweet
 * +,-,*,/四则运算的表达式逆波兰解析计算类,精确计算,应用BigDecimal类处理 
 * 支持负数,但规范除整个表达式第一个数为负数时可以不出现在'('后,其它表达式中间任何位置的 
 * 负数必须出现在'('后,即:用括号括起来。比如:-3+(-2+1)*10或-3+((-2)+1)*10或(-3)+(-2+1)*10或(-3)+((-2)+1)*10 
 */
public class MathExpress {

    private final static String OP1 = "+";

    private final static String OP2 = "-";

    private final static String OP3 = "*";

    private final static String OP4 = "/";

    private final static String OPSTART = "(";

    private final static String OPEND = ")";

    //最原始的四则运算式  
    private String expBase;

    //经过初始化处理后的四则运算式  
    private String expInited;

    //精度  
    private int precision=200;

    //取舍模式  
    private RoundingMode roundingMode = RoundingMode.HALF_UP;

    //精度上下文  
    private MathContext mc;

    //四则运算解析  
    private List<String> expList = new ArrayList<>();

    //存放逆波兰表达式  
    private List<String> rpnList = new ArrayList<>();

    public MathExpress init(String expBase) {
        this.expBase = expBase;
        this.mc = new MathContext(precision,roundingMode);
        this.expInited = initExpress(expBase);

        StringTokenizer st = new StringTokenizer(this.expInited,"+-*/^%()",true);
        while(st.hasMoreElements()){
            this.expList.add(st.nextElement().toString().trim());
        }

        this.rpnList = initRPN(this.expList);
        return this;
    }

    public String getExpBase() {
        return expBase;
    }

    public void setExpBase(String expBase) {
        this.expBase = expBase;
    }

    public String getExpInited() {
        return expInited;
    }

    public void setExpInited(S
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值