java BigDecimal使用


一、BigDecimal的加減乘除:

package com.cy.test.math;

import java.math.BigDecimal;

public class TestBigDecimal {
    public static void main(String[] args) {
        //加法
        double d1 = 1.234;
        double d2 = 2.341;
        System.out.println(d1 + d2);    //3.575

        System.out.println(d1 * d2);    //2.8887940000000003精度出問題了
        System.out.println(d1 / d2);    //0.5271251601879539 這個是對的

        //使用BigDecimal,加法
        BigDecimal b1 = new BigDecimal(Double.toString(d1));
        BigDecimal b2 = new BigDecimal(Double.toString(d2));
        System.out.println(b1.add(b2).doubleValue());       //3.575

        //減法
        System.out.println(b1.subtract(b2).doubleValue());  //-1.107

        //乘法
        System.out.println(b1.multiply(b2).doubleValue());  //2.888794

        //除法  保留小數點后兩位,四舍五入
        System.out.println(b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP)); //0.53
    }
}

二、BigDecimal轉String的時候出現的精度問題:

有些兩位類型的小數如double類型的,直接轉化為String時,調用的是BigDecimal的toString方法,會出現精度問題。解決辦法:

package com.cy.test.math;

import java.math.BigDecimal;

public class TestBigDecimal3 {

    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal(1.23);
        BigDecimal b2 = new BigDecimal(1.24);
        BigDecimal b3 = new BigDecimal(1.25);

        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);

        BigDecimal plus = b1.add(b2).add(b3);
        //直接打印會精度失真
        System.out.println(plus);
        System.out.println(String.valueOf(plus.floatValue()));

        //設置小數位數,第一個變量是小數位數,第二個變量是取舍方法(四舍五入)
        BigDecimal plus2 = b1.add(b2).add(b3).setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(plus2);
    }
}

打印結果:

1.229999999999999982236431605997495353221893310546875
1.2399999999999999911182158029987476766109466552734375
1.25
3.7199999999999999733546474089962430298328399658203125
3.72
3.72

 


免責聲明!

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



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