我們來看一看java中bigdecimal的用法
public class mathutil {
// 加法
public static double add(double a,double b,int scal) throws exception{
bigdecimal add1 = conversiontobigdecimal(a);
bigdecimal add2 = conversiontobigdecimal(b);
double result = add1.add(add2).setscale(scal,bigdecimal.round_half_up).doublevalue();
return result;
}
// 減法
public static double subtract(double a,double b,int scal) throws exception{
bigdecimal subtract1 = conversiontobigdecimal(a);
bigdecimal subtract2 = conversiontobigdecimal(b);
double result = subtract1.subtract(subtract2).setscale(scal,bigdecimal.round_half_up).doublevalue();
// 乘法
public static double multiply(double a,double b,int scal) throws exception{
bigdecimal multiply1 = conversiontobigdecimal(a);
bigdecimal multiply2 = conversiontobigdecimal(b);
double result = multiply1.multiply(multiply2).setscale(scal,bigdecimal.round_half_up).doublevalue();
// 除法
public static double divide(double a,double b,int scal) throws exception{
bigdecimal divide1 = conversiontobigdecimal(a);
bigdecimal divide2 = conversiontobigdecimal(b);
double result = divide1.divide(divide2,scal,bigdecimal.round_half_up).doublevalue();
// 類型轉換
public static bigdecimal conversiontobigdecimal(object obj) throws exception
{
if (obj instanceof double)
{
return new bigdecimal(obj.tostring());
}
else if (obj instanceof float)
else if (obj instanceof integer)
else if (obj instanceof long)
else if (obj instanceof byte)
else if (obj instanceof short)
else
throw new exception("不能轉換");
下面我們來看看bigdecimal的setscale方法
bigdecimal.setscale()方法用于格式化小數點
表示保留一位小數,預設用四舍五入方式
setscale(1)
直接删除多餘的小數位,如2.35會變成2.3
setscale(1,bigdecimal.round_down)
進位處理,2.35變成2.4
setscale(1,bigdecimal.round_up)
四舍五入,2.35變成2.4
setscale(1,bigdecimal.round_half_up)
四舍五入,2.35變成2.3,如果是5則向下舍
setscaler(1,bigdecimal.round_half_down)
注意點一
scale指的是你小數點後的位數。scale()就是bigdecimal類中的方法。如
bigdecimal b = new bigdecimal("123.456");
b.scale(),傳回的就是3
注意點二
roundingmode是小數的保留模式。它們都是bigdecimal中的常量字段,有很多種,如
bigdecimal.round_half_up表示的就是4舍5入
注意點三
pubilc bigdecimal divide(bigdecimal divisor, int scale, int roundingmode)的意思是說:我用一個bigdecimal對象除以divisor後的結果,并且要求這個結果保留有scale個小數位,roundingmode表示的就是保留模式是什麼,是四舍五入啊還是其它的
注意點四
對于一般add、subtract、multiply方法的小數位格式化如下
bigdecimal mdata = new bigdecimal("9.655").setscale(2, bigdecimal.round_half_up);
system.out.println("mdata=" + mdata);
原帖位址:
http://blog.csdn.net/ahwr24/article/details/7048724
http://blog.csdn.net/zb48857441/article/details/6180958