zoukankan      html  css  js  c++  java
  • 精确的浮点数运算(包括加、减、乘、除、四舍五入)的工具类

    package com.qiyuan.util;
    
    import java.math.BigDecimal;
    
    public class ArithUtil {
    
        // 除法运算默认精度  
        private static final int DEF_DIV_SCALE = 10;  
      
        private ArithUtil() {  
      
        }  
      
        /** 
         * 精确加法 
         */  
        public static double add(double value1, double value2) {  
            BigDecimal b1 = BigDecimal.valueOf(value1);  
            BigDecimal b2 = BigDecimal.valueOf(value2);  
            return b1.add(b2).doubleValue();  
        }  
      
        /** 
         * 精确减法 
         */  
        public static double sub(double value1, double value2) {  
            BigDecimal b1 = BigDecimal.valueOf(value1);  
            BigDecimal b2 = BigDecimal.valueOf(value2);  
            return b1.subtract(b2).doubleValue();  
        }  
      
        /** 
         * 精确乘法 
         */  
        public static double mul(double value1, double value2) {  
            BigDecimal b1 = BigDecimal.valueOf(value1);  
            BigDecimal b2 = BigDecimal.valueOf(value2);  
            return b1.multiply(b2).doubleValue();  
        }  
      
        /** 
         * 精确除法 使用默认精度 
         */  
        public static double div(double value1, double value2) throws IllegalAccessException {  
            return div(value1, value2, DEF_DIV_SCALE);  
        }  
      
        /** 
         * 精确除法 
         * @param scale 精度 
         */  
        public static double div(double value1, double value2, int scale) throws IllegalAccessException {  
            if(scale < 0) {  
                throw new IllegalAccessException("精确度不能小于0");  
            }  
            BigDecimal b1 = BigDecimal.valueOf(value1);  
            BigDecimal b2 = BigDecimal.valueOf(value2);  
            // return b1.divide(b2, scale).doubleValue();  
            return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();  
        }  
      
        /** 
         * 四舍五入 
         * @param scale 小数点后保留几位 
         */  
        public static double round(double v, int scale) throws IllegalAccessException {  
            return div(v, 1, scale);  
        }  
          
        /** 
         * 比较大小 
         */  
        public static boolean equalTo(BigDecimal b1, BigDecimal b2) {  
            if(b1 == null || b2 == null) {  
                return false;  
            }  
            return 0 == b1.compareTo(b2);  
        }  
        
        
        public static void main(String[] args) throws IllegalAccessException {
            double value1=1.2345678912311;
            double value2=9.1234567890123;
            BigDecimal value3=new BigDecimal(Double.toString(value1));
            BigDecimal value4=new BigDecimal(Double.toString(value2));
            System.out.println("精确加法================="+ArithUtil.add(value1, value2));
            System.out.println("精确减法================="+ArithUtil.sub(value1, value2));
            System.out.println("精确乘法================="+ArithUtil.mul(value1, value2));
            System.out.println("精确除法 使用默认精度 ================="+ArithUtil.div(value1, value2));
            System.out.println("精确除法  设置精度================="+ArithUtil.div(value1, value2,20));
            System.out.println("四舍五入   小数点后保留几位 ================="+ArithUtil.round(value1, 10));
            System.out.println("比较大小 ================="+ArithUtil.equalTo(value3, value4));
        }
    }
  • 相关阅读:
    反射类的字段
    反射类的方法(其中main方法比较特殊)
    反这类的构造函数(写框架时才会用到反射类)
    枚举
    进制转换小算法
    第一个小程序:用户登录
    Hello World!
    潭州课堂25班:Ph201805201 tornado 项目 第五课 增加用户系统-用户中心(课堂笔记)
    潭州课堂25班:Ph201805201 tornado 项目 第四课 增加用户注册登录(课堂笔记)
    潭州课堂25班:Ph201805201 tornado 项目 第三课 项目 图片上传,展示 (课堂笔记)
  • 原文地址:https://www.cnblogs.com/javahr/p/8321692.html
Copyright © 2011-2022 走看看