轉(zhuǎn)自
一提到Java里面的商業(yè)計(jì)算嘁字,我們都知道不能用float和double蒿往,因?yàn)樗麄儫o(wú)法進(jìn)行精確計(jì)算。但是Java的設(shè)計(jì)者給編程人員提供了一個(gè)很有用的類BigDecimal棕诵,他可以完善float和double類無(wú)法進(jìn)行精確計(jì)算的缺憾裁良。
BigDecimal類位于java.maths類包下。
首先我們來(lái)看下如何構(gòu)造一個(gè)BigDecimal對(duì)象校套。它的構(gòu)造函數(shù)很多价脾,我挑最常用的兩個(gè)來(lái)演示一下:
一個(gè)就是BigDecimal(double val),另一個(gè)就是BigDecimal(String str)笛匙。
下面是兩個(gè)浮點(diǎn)數(shù)相減的例子來(lái)說(shuō)明:
public static void main(String[] args) {
double a = 1;
double b = 0.9;
//推薦做法:把double轉(zhuǎn)成String
BigDecimal a1 = new BigDecimal(Double.toString(a));
BigDecimal b1 = new BigDecimal(Double.toString(b));
double c = a1.subtract(b1).doubleValue();
System.out.println("c=" + c);
//不推薦做法:直接傳入double
BigDecimal a2 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
double d = a2.subtract(b2).doubleValue();
System.out.println("d=" + d);
}
結(jié)果為:
c=0.1
d=0.09999999999999998
結(jié)論:
- 利用
double類型
作為參數(shù)的構(gòu)造函數(shù)侨把,不能精確構(gòu)造一個(gè)BigDecimal對(duì)象,需要自己指定一個(gè)上下文的環(huán)境妹孙,也就是指定精確位秋柄。 - 利用
String類型
作為參數(shù)的構(gòu)造函數(shù),能精確的構(gòu)造出一個(gè)BigDecimal對(duì)象蠢正。