1. 程式人生 > >Java程式設計中,什麼資料型別適合用來表示價格?

Java程式設計中,什麼資料型別適合用來表示價格?

我在看書時候偶然看到這個問題,我的第一反應:這還用問嘛!!!float和double都可以呀。(這充分說明了我是java初學者。。。)

不過,好學的我,還是想看看答案到底寫了個啥。答案如下:

在初學Java的時候,我們知道float和double都表示浮點數。但是由於float和double所表示的浮點數是近似值,不是精確的值,因此,二者不適合作為價格的資料型別。Java語言提供了另外一種資料型別BigDecimal,可以表示精確的浮點數,適合用作財務計算的資料型別。但是需要注意的是,在使用BigDecimal的時候,BigDecimal有多個過載的構造方法能表示精度的值,只有用引數為String型別的構造方法才能表示。

看到此,我還是處於懷疑人生狀態。。。

來個例子瞧瞧:

import java.math.BigDecimal;

public class Test {
	public static void main(String[] args) {
		float d1 = 2.15f;
float d2 = 1.10f;
System.out.println("float型別運算結果:\n" + d1 + "-" + d2 + "=" + (d1 -d2) + "\n");

double d3 = 2.15;
double d4 = 1.10;
System.out.println("double型別運算結果:\n" + d3 + "-" + d4 + "=" + (d3 -d4) + "\n");
		
		BigDecimal bd1 = new BigDecimal("2.15");
		BigDecimal bd2 = new BigDecimal("1.10");
		System.out.println("BigDecimal,引數為String型別運算結果:\n" + bd1 + "-" + bd2 + "=" + bd1.subtract(bd2) + "\n");
		
		BigDecimal bd3 = new BigDecimal(2.15);
		BigDecimal bd4 = new BigDecimal(1.10);
		System.out.println("BigDecimal,引數為double型別時運算結果:\n" + bd3 + "-" + bd4 + "=" + bd3.subtract(bd4) + "\n");
	}
}

執行結果:


呀!!!還真是介個樣紙!!!


對於BigDecimal(),

java.math.BigDecimal.BigDecimal(String val)

public BigDecimal(String val) {
        this(val.toCharArray(), 0, val.length());
    }
public char[] toCharArray() {
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
    }
java.math.BigDecimal.BigDecimal(double val)  這個函式計算不精確的原因,恐怕還是double惹的禍吧
public BigDecimal(double val) {
        this(val,MathContext.UNLIMITED);
    }
哎!我還是趕緊把基本資料型別在記憶體中怎麼儲存的,好好學學吧!