bigdecimal bigdecimal減法乘法除法
bigdecimal是什么?
JAVA在應(yīng)用的時(shí)候,我們需要使用API,自然就需要用到bigdecimal,一般用來對16位以及32位密碼的運(yùn)算,在我們?nèi)粘J褂玫臅r(shí)候,一般需要對文字以及數(shù)字或大或小需要進(jìn)行運(yùn)算,因?yàn)槲覀儾荒苁褂萌粘I钪械募臃p法乘法除法,所以我們必須要去調(diào)用加法減法乘法除法運(yùn)算,那么怎么運(yùn)算呢?下面來看看。,
方法中的參數(shù)也必須是BigDecimal的對象。構(gòu)造器是類的特殊方法,專門用來創(chuàng)建對象,特別是帶有參數(shù)的對象。
示例代碼如下
import java.math.BigDecimal;
public class T {
public static void main(String[] args) {
String a = "9999.9999";
int b = 9999;
double c = 9999.9999;
char d = 99;
System.out.println("===================");
// 不同類型轉(zhuǎn)為BigDecimal
BigDecimal ma = new BigDecimal(a);
BigDecimal mb = new BigDecimal(b);
BigDecimal mc = new BigDecimal(c);
BigDecimal md = new BigDecimal(d);
System.out.println("ma:"+ma.toString());
System.out.println("mb:"+mb.toString());
System.out.println("mc:"+mc.toString());
System.out.println("md:"+md.toString());
System.out.println("===================");
// 加
BigDecimal add = ma.add(mb);
System.out.println("加法:"+add);
// 減
BigDecimal sub = ma.subtract(mb);
System.out.println("減法:"+sub);
// 乘
BigDecimal mul = mb.multiply(md);
System.out.println("乘法:"+mul);
// 除
BigDecimal div = mb.divide(md);
System.out.println("除法:"+div);
System.out.println("===================");
mc = mc.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("四舍五入:"+mc);
System.out.println("===================");
mc = mc.negate();
System.out.println("負(fù)數(shù):"+mc);
System.out.println("===================");
}
}
ava在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算。雙精度浮點(diǎn)型變量double可以處理16位有效數(shù)。
在實(shí)際應(yīng)用中,需要對更大或者更小的數(shù)進(jìn)行運(yùn)算和處理。float和double只能用來做科學(xué)計(jì)算或者是工程計(jì)算,在商業(yè)計(jì)算中要用java.math.BigDecimal。
BigDecimal所創(chuàng)建的是對象,我們不能使用傳統(tǒng)的+、-、*、/等算術(shù)運(yùn)算符直接對其對象進(jìn)行數(shù)學(xué)運(yùn)算,而必須調(diào)用其相對應(yīng)的方法。
方法中的參數(shù)也必須是BigDecimal的對象。構(gòu)造器是類的特殊方法,專門用來創(chuàng)建對象,特別是帶有參數(shù)的對象。
1.相加
兩個(gè)BigDecimal變量a,b。
如果想進(jìn)行相加,即a加b的話,返回值需要使用a進(jìn)行接收,如下:
a?=?a.add(b);
BigDecimal為不可變類,?所以執(zhí)行運(yùn)算的結(jié)果需要再返回給a
a?=?a.add(b);
2.BigDecimal數(shù)據(jù)為null
兩個(gè)BigDecimal 數(shù)據(jù)類型相加的話,如果被相加的數(shù)為null,會報(bào)空指針異常,
所以要做空指針判斷,如下。
if (bailPaySum.compareTo(faMoSum) == 1) {
return 1;//可以執(zhí)行
} else {
return 0;//不可以執(zhí)行
}
序號
方??? 法
類型
描??? 述
1
public BigDecimal(double val)
構(gòu)造
將double表示形式轉(zhuǎn)換
為BigDecimal
2
public BigDecimal(int val)
構(gòu)造
將int表示形式轉(zhuǎn)換為
BigDecimal
3
public BigDecimal(String val)
構(gòu)造
將字符串表示
形式轉(zhuǎn)換為BigDecimal
4
public BigDecimal add(BigDecimal augend)
普通
加法
5
public BigDecimal subtract(BigDecimal
subtrahend)
普通
減法
6
public BigDecimal multiply(BigDecimal
multiplicand)
普通
乘法
7
public BigDecimal divide(BigDecimal
divisor)
普通
除法
之前很少使用這樣的一個(gè)對象BigDecimal,今天在改需求的時(shí)候遇到了,結(jié)果坑爹的怎么相加最后都為零。
代碼如下:
BigDecimal totalAmount = new BigDecimal(0);
totalAmount.add(new BigDecimal(5000));
System.out.println(totalAmount);
輸出結(jié)果為0。
查資料后才知道,要這樣寫才行:
BigDecimal totalAmount = new BigDecimal(0);
totalAmount = totalAmount.add(new BigDecimal("5000"));
System.out.println(totalAmount);
同時(shí),在new一個(gè)BigDecimal對象的時(shí)候,最好傳入字符串或者int類型的數(shù)字,因?yàn)閭魅雂ouble類型的數(shù)字會有很神奇的事情發(fā)生,
比如說:
BigDecimal totalAmount = new BigDecimal(0);
totalAmount = totalAmount.add(new BigDecimal(0.59));
System.out.println(totalAmount);
輸出結(jié)果:0.58999999999999996891375531049561686813831329345703125
但是如果傳入的是String類型的數(shù)字:
BigDecimal totalAmount = new BigDecimal(0);
totalAmount = totalAmount.add(new BigDecimal("0.59"));
System.out.println(totalAmount);
輸出結(jié)果:
0 Comments.