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");
	}
}		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");
	}
}

运行结果:

呀!!!还真是介个样纸!!!

Java编程中,什么数据类型适合用来表示价格?_第1张图片

对于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);
    }

哎!我还是赶紧把基本数据类型在内存中怎么存储的,好好学学吧!
 

你可能感兴趣的:(Java编程中,什么数据类型适合用来表示价格?)