bigdecimal bigdecimal減法乘法除法

bigdecimal是什么?

JAVA在應(yīng)用的時候,我們需要使用API,自然就需要用到bigdecimal,一般用來對16位以及32位密碼的運算,在我們?nèi)粘J褂玫臅r候,一般需要對文字以及數(shù)字或大或小需要進行運算,因為我們不能使用日常生活中的加法減法乘法除法,所以我們必須要去調(diào)用加法減法乘法除法運算,那么怎么運算呢?下面來看看。,

方法中的參數(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ù)進行精確的運算。雙精度浮點型變量double可以處理16位有效數(shù)。

在實際應(yīng)用中,需要對更大或者更小的數(shù)進行運算和處理。float和double只能用來做科學(xué)計算或者是工程計算,在商業(yè)計算中要用java.math.BigDecimal。

BigDecimal所創(chuàng)建的是對象,我們不能使用傳統(tǒng)的+、-、*、/等算術(shù)運算符直接對其對象進行數(shù)學(xué)運算,而必須調(diào)用其相對應(yīng)的方法。

方法中的參數(shù)也必須是BigDecimal的對象。構(gòu)造器是類的特殊方法,專門用來創(chuàng)建對象,特別是帶有參數(shù)的對象。

1.相加

兩個BigDecimal變量a,b。

如果想進行相加,即a加b的話,返回值需要使用a進行接收,如下:

a?=?a.add(b);

 

 

 
BigDecimal為不可變類,?所以執(zhí)行運算的結(jié)果需要再返回給a
a?=?a.add(b);

 

 

2.BigDecimal數(shù)據(jù)為null

兩個BigDecimal 數(shù)據(jù)類型相加的話,如果被相加的數(shù)為null,會報空指針異常,

所以要做空指針判斷,如下。

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)
普通
除法

之前很少使用這樣的一個對象BigDecimal,今天在改需求的時候遇到了,結(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);
同時,在new一個BigDecimal對象的時候,最好傳入字符串或者int類型的數(shù)字,因為傳入double類型的數(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é)果:

更多
  • 該日志由 于2018年08月11日發(fā)表在 未分類 分類下, 你可以發(fā)表評論,并在保留原文地址 及作者的情況下引用到你的網(wǎng)站或博客。
  • 本文鏈接: bigdecimal bigdecimal減法乘法除法 | 幫助信息-動天數(shù)據(jù)
  • 版權(quán)所有: 幫助信息-動天數(shù)據(jù)-轉(zhuǎn)載請標(biāo)明出處
  • 【上一篇】 【下一篇】

    0 Comments.

    發(fā)表評論