zoukankan      html  css  js  c++  java
  • Java中精确的数字计算类BigDecimal

      在日常开放当中需要我们计算数字,利率。通常Java的做法是使用Math相关的API。但是,这样做是不够精确的,由于float和double不能进行计算,如果强行进行计算会使得计算不准确。造成难以挽回的损失。为了弥补这一个缺点Java提供了BigDecimal这个类来解决。在使用这个类的时候需要将double转成String进行计算。为了方便,下面我写了几个常用的计算方法,当然也可以自己增加。

    public class CalculateUtils {
        /**
         * 加法
         *
         * @param var1
         * @param var2
         * @return
         */
        public static double add(double var1, double var2) {
            BigDecimal b1 = new BigDecimal(Double.toString(var1));
            BigDecimal b2 = new BigDecimal(Double.toString(var2));
            return b1.add(b2).doubleValue();
    
        }
    
        /**
         * 减法
         *
         * @param var1
         * @param var2
         * @return
         */
    
        public static double sub(double var1, double var2) {
            BigDecimal b1 = new BigDecimal(Double.toString(var1));
            BigDecimal b2 = new BigDecimal(Double.toString(var2));
            return b1.subtract(b2).doubleValue();
        }
    
        /**
         * 乘法
         *
         * @param var1
         * @param var2
         * @return
         */
        public static double mul(double var1, double var2) {
            BigDecimal b1 = new BigDecimal(Double.toString(var1));
            BigDecimal b2 = new BigDecimal(Double.toString(var2));
            return b1.multiply(b2).doubleValue();
        }
    
        /**
         * 除法
         *
         * @param v1
         * @param v2
         * @param scale 精度,到小数点后几位
         * @return
         */
    
        public static double div(double v1, double v2, int scale) {
    
            if (scale < 0) {
    
                throw new IllegalArgumentException("The scale must be a positive integer or ");
    
            }
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    
        }
    
        /**
         * 四舍五入
         * @param v
         * @param scale 精确位数
         * @return
         */
        public static double round(double v, int scale) {
    
            if (scale < 0) {
    
                throw new IllegalArgumentException("The scale must be a positive integer or zero");
    
            }
    
            BigDecimal b = new BigDecimal(Double.toString(v));
    
            BigDecimal one = new BigDecimal("1");
    
            return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    
        }
    
    
    
    }

     

             欢迎关注我的微信公众号

  • 相关阅读:
    AngularJs学习笔记Understanding Angular Templates
    AngularJs学习笔记Creating Services
    AngularJs学习笔记E2E Testing
    AngularJs学习笔记Using $location
    AngularJs学习笔记Injecting Services Into Controllers
    AngularJs学习笔记unittesting
    AngularJs学习笔记Guide教程系列文章索引
    C语言 自幂数
    C# 虚拟键盘核心方法 Tech
    [转]SQLite SQL语句结构详解 Tech
  • 原文地址:https://www.cnblogs.com/lovelyYakir/p/6290299.html
Copyright © 2011-2022 走看看