Java使用BigDecimal解決浮點型運算丟失精度的問題


  •     @Test
        public void test1(){
            System.out.print(0.05+0.01);
        }

  •     @Test
        public void test2(){
            BigDecimal b1 = new BigDecimal(0.01);
            BigDecimal b2 = new BigDecimal(0.05);
            System.out.print(b1.add(b2));
        }

  •     @Test
        public void test3(){
            BigDecimal b1 = new BigDecimal("0.01");
            BigDecimal b2 = new BigDecimal("0.05");
            System.out.print(b1.add(b2));
        }

  • BigDecimal的加減乘除的工具類
    package com.mmall.util;
    
    import java.math.BigDecimal;
    
    public class BigDecimalUtil {
    
        private BigDecimalUtil(){
    
        }
    
        public static BigDecimal add(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.add(b2);
        }
    
        public static BigDecimal sub(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.subtract(b2);
        }
    
        public static BigDecimal mul(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.multiply(b2);
        }
    
        public static BigDecimal div(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));
            BigDecimal b2 = new BigDecimal(Double.toString(v2));
            return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留兩位小數
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM