zoukankan      html  css  js  c++  java
  • Java double 加、减、乘、除

    double类型的数值接相加的时候,结果可能出现精度误差
    为此Java提供了高精度计算的方法:java.math.*里面提供了BigDecimal类

    import org.junit.Test;
    
    import java.math.BigDecimal;
    import java.math.MathContext;
    
    /**
     * @author ceshi
     * @Title: BigDecimalUtil
     * @ProjectName BigDecimalUtil
     * @Description: TODO
     * @date 2018/7/2719:30
     */
    public class BigDecimalUtil {
    
    
        @Test
        public void test(){
            System.out.println(add(0.02,0.03));
            System.out.println(subtraction(0.05,0.03,2));
            System.out.println(multiplication(0.2,0.3));
            System.out.println(division(0.02,0.03,2));
            System.out.println(divisionRounding(0.5,0));
        }
    
        /**
         * double加法
         * @param a
         * @param b
         * @return
         */
        public double add(double a, double b) {
            BigDecimal b1=new BigDecimal(a);
            BigDecimal b2 = new BigDecimal(b);
            return b1.add(b2).doubleValue();
        }
    
        /**
         * double减法
         * @param a
         * @param b
         * @param setPrecision 设置精度
         * @return
         */
        public static double subtraction(double a, double b,int setPrecision) {
            BigDecimal b1 = new BigDecimal(a);
            BigDecimal b2 = new BigDecimal(b);
            return b1.subtract(b2,new MathContext(setPrecision)).doubleValue();
        }
    
        /**
         * double乘法 结果保留两位小数
         * @param a
         * @param b
         * @return
         */
        public static double multiplication(double a, double b) {
            BigDecimal b1 = new BigDecimal(a);
            BigDecimal b2 = new BigDecimal(b);
            return b1.multiply(b2).doubleValue();
        }
    
        /**
         * double除法
         * @param a
         * @param b
         * @param accurate 结果保留位数
         * @return
         */
        public static double division(double a, double b,int accurate) {
            if (accurate < 0) {
                throw new RuntimeException("精确度必须是正整数或零");
            }
            BigDecimal b1 = new BigDecimal(a);
            BigDecimal b2 = new BigDecimal(b);
            return b1.divide(b2, accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    
    
        /**
         * double除法 四舍五入
         * @param a
         * @param scale accurate 小数点后留几位
         * @return
         */
        public static double divisionRounding(double a, int scale) {
            if (scale < 0) {
                throw new RuntimeException("精确度必须是正整数或零");
            }
            BigDecimal b = new BigDecimal(a);
            BigDecimal one = new BigDecimal("1");
            return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
    
    }

    运行结果:

  • 相关阅读:
    jdbc连接数据库 url
    解决IntelliJ IDEA 使用 TOMCAT 中文乱码问题
    web.xml 4.0 头部信息
    jar包冲突解决方案
    idea 快捷键
    基于单片机的车辆防碰撞及自动刹车系统(STC89C52RC芯片+超声波传感器HC-SR04+液晶屏1602+继电器+蜂鸣器)
    电子时钟万年历+51单片机+1602液晶屏+DS1302+DS18B20+按键
    1008 数组元素循环右移问题(PAT)
    1007 素数对猜想(PAT)
    1006 换个格式输出整数(PAT)
  • 原文地址:https://www.cnblogs.com/qinxu/p/9379462.html
Copyright © 2011-2022 走看看