Java編程,用什么數據類型表示價格?


在Java中,float和double都表示浮點型數,所表示的浮點數是近似值,而不是精確的值,所以,這兩種數據類型不適合作為價格的數據類型。Java語言提供另外一種數據類型BigDecimal,可以用來表示精確的浮點數。

package com.zhhvip;

import java.math.BigDecimal;

public class Test {

    public static void main(String[] args) {
        double d1 = 20.15;
        double d2 = 10.10;
        System.out.println("double類型的運行結果:"+(d1-d2));

        BigDecimal bigDecimal1 =  BigDecimal.valueOf(d1);
        BigDecimal bigDecimal2 =  BigDecimal.valueOf(d2);
        System.out.println("BigDecimal類型的運行結果:"+(bigDecimal1.subtract(bigDecimal2)));

//        錯誤的使用方式
        BigDecimal bigDecimal3 = new BigDecimal(d1);
        BigDecimal bigDecimal4 = new BigDecimal(d2);
        System.out.println("BigDecimal類型錯誤使用方式的運行結果:"+(bigDecimal3.subtract(bigDecimal4)));

//        正確的使用方式
        BigDecimal bigDecimal5 = new BigDecimal("20.15");
        BigDecimal bigDecimal6 = new BigDecimal("10.10");
        System.out.println("BigDecimal類型正確使用方式的運行結果:"+(bigDecimal5.subtract(bigDecimal6)));

    }
}

運行結果:

 

注意,new 一個BigDecimal時候,只有參數為String類型時候才能夠正確表示,為什么BigDecimal.valueOf()又可以呢?因為BigDecimal.valueOf()本質上也是調用了參數類型為String的構造方法。

    public static BigDecimal valueOf(double val) {
        // Reminder: a zero double returns '0.0', so we cannot fastpath
        // to use the constant ZERO.  This might be important enough to
        // justify a factory approach, a cache, or a few private
        // constants, later.
        return new BigDecimal(Double.toString(val));
    }

 


免責聲明!

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



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