我们来看一看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