zoukankan      html  css  js  c++  java
  • java 精确计算 好用的工具类

    java 精确计算 好用的工具类

    package cn.wangbingchen.mytoolwarehouse.tools;
    
    import java.math.BigDecimal;
    
    /**
     * IT野王
     * 自认为好用的计算工具
     * 例如计算 8*23/6 结果保留3位小数
     * BigDecimalUtil.getInstance(8).multiply(16).divide(6).getDoubleVal(3)
     *
     */
    
    public class BigDecimalUtil{
    
        //计算默认精度
        private Integer DEFAULT_DIV_SCALE_100 = 100;
    
        //计算结果存储
        private BigDecimal bigDecimal;
    
        //构造方法
        private BigDecimalUtil(String val){
            this.bigDecimal = new BigDecimal(val);
        }
    
        //对外构建方法
        public static BigDecimalUtil getInstance(String val){
            return new BigDecimalUtil(val);
        }
        //对外构建方法
        public static BigDecimalUtil getInstance(double val){
            return new BigDecimalUtil(Double.toString(val));
        }
    
        //设置除数精度
        public BigDecimalUtil setScale(Integer scale){
            if (scale <= 0) {
                throw new IllegalArgumentException("设置的精度不能小于等于0");
            }
            this.DEFAULT_DIV_SCALE_100 = scale;
            return this;
        }
    
        //除法默认 保留小数点100位
        public BigDecimalUtil divide(double val) {
            this.bigDecimal = this.bigDecimal.divide(BigDecimal.valueOf(val), DEFAULT_DIV_SCALE_100, BigDecimal.ROUND_HALF_EVEN);
            return this;
        }
    
        //加法 保留小数点100位
        public BigDecimalUtil add(double val) {
            this.bigDecimal = this.bigDecimal.add(BigDecimal.valueOf(val));
            return this;
        }
    
        //加法 保留小数点100位
        public BigDecimalUtil add(String val) {
            this.bigDecimal = this.bigDecimal.add(new BigDecimal(val));
            return this;
        }
    
        //减法 保留小数点100位
        public BigDecimalUtil subtract(double val) {
            this.bigDecimal = this.bigDecimal.subtract(BigDecimal.valueOf(val));
            return this;
        }
    
        //减法 保留小数点100位
        public BigDecimalUtil subtract(String val) {
            this.bigDecimal = this.bigDecimal.subtract(new BigDecimal(val));
            return this;
        }
    
        //乘法 保留小数点100位
        public BigDecimalUtil multiply(double val) {
            this.bigDecimal = this.bigDecimal.multiply(BigDecimal.valueOf(val));
            return this;
        }
    
        //乘法 保留小数点100位
        public BigDecimalUtil multiply(String val) {
            this.bigDecimal = this.bigDecimal.multiply(new BigDecimal(val));
            return this;
        }
    
    
    
    
        //取为 String 类型的结果
        public String getStringVal(){
            return this.bigDecimal.toString();
        }
    
        //取为 String 类型的结果 可以指定 保留的小数点
        public String getStringVal(int scale){
            if (scale == 0) {
                throw new IllegalArgumentException("除数不能为0");
            }
            return this.bigDecimal.divide(BigDecimal.valueOf(1), scale, BigDecimal.ROUND_HALF_EVEN).toString();
        }
    
        //取为 Double 类型的结果
        public Double getDoubleVal(){
            return this.bigDecimal.doubleValue();
        }
        //取为 Double 类型的结果 可以指定 保留的小数点
        public Double getDoubleVal(int scale){
            if (scale == 0) {
                throw new IllegalArgumentException("除数不能为0");
            }
            return this.bigDecimal.divide(BigDecimal.valueOf(1), scale, BigDecimal.ROUND_HALF_EVEN).doubleValue();
        }
    
        //取为 Integer 类型的结果
        public Integer getIntegerVal(){
            return this.bigDecimal.intValue();
        }
        //取为 Float 类型的结果
        public Float getFloatValue(){
            return this.bigDecimal.floatValue();
        }
        //取为 Long 类型的结果
        public Long getLongValue(){
            return this.bigDecimal.longValue();
        }
    
    }
    
    

    使用方式

    计算:10除以3 保留5位小数

    BigDecimalUtil.getInstance(10).divide(3).getDoubleVal(5);
    

    结果:3.33333

    计算:20除以3除以7 保留10位小数

    BigDecimalUtil.getInstance(20).divide(3).divide(7).getDoubleVal(12);
    

    结果:0.952380952381

  • 相关阅读:
    第二周作业
    第一次作业
    第0次作业
    第一次的作业
    第0次作业
    第三次作业
    %f使用时的注意事项
    关于c++停止工作
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/wangbingchen/p/14645484.html
Copyright © 2011-2022 走看看