BigDecimal类方法封装实际使用 bigdecimal

参考资料

1 java.math.BigDecimal的用法

http://tech.e800.com.cn/articles/2009/525/1243215079206_1.html

http://jeelee.iteye.com/blog/652003

2 Java BigDecimal转换示例

http://www.blogjava.net/javagrass/archive/2011/07/04/353618.html

3 BigDecimal不整除的一个异常

http://zengbin163-gmail-com.iteye.com/blog/433862

请看以下代码

Java代码  

intsumInt=0;

BigDecimalsumBd=newBigDecimal(0);

for(inti=0;i<10;i++){

sumInt+=i;

sumBd.add(newBigDecimal(i));

}

System.out.println("intsum:"+sumInt+",BigDecimalsum:"+sumBd);

打印结果BigDecimal sum为0

正确的做法是:在循环中这样设置

Java代码  

sumBd=sumBd.add(newBigDecimal(i));

Java也提供了BigInteger类,感觉这个类没用BigDecimal方便,BigInteger它没有接受int类型的构造函数.BigDecimal提供了四个常用方法

Java代码  

BigDecimaltestBg1=newBigDecimal(5);

BigDecimaltestBg2=newBigDecimal(3);

BigDecimalsumBg=testBg1.add(testBg2);

System.out.println("testBg1:"+testBg1+",testBg2:"+testBg2+",相加:"+sumBg);

BigDecimalsubtractBg=testBg1.subtract(testBg2);

System.out.println("testBg1:"+testBg1+",testBg2:"+testBg2+",相减:"+subtractBg);
BigDecimal类方法封装实际使用 bigdecimal

BigDecimalmultiplyBg=testBg1.multiply(testBg2);

System.out.println("testBg1:"+testBg1+",testBg2:"+testBg2+",相乘:"+multiplyBg);

//注意以下相除会抛出异常,原因:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常

//BigDecimaldivideBg=testBg1.divide(testBg2);

//System.out.println("testBg1:"+testBg1+",testBg2:"+testBg2+",相除:"+divideBg);

//解决方法是:设置精确度;就是给divide设置精确的小数点divide(xxxxx,2,BigDecimal.ROUND_HALF_EVEN)

//其中的第二个参数表示的是:保留小数点之后多少位

BigDecimaldivideBg=testBg1.divide(testBg2,10,BigDecimal.ROUND_HALF_EVEN);

System.out.println("testBg1:"+testBg1+",testBg2:"+testBg2+",相除:"+divideBg);

BigDecimal不整除抛出的异常,请设置精确度!

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

at java.math.BigDecimal.divide(BigDecimal.java:1278)

at main.Main.main(Main.java:41)

以下为网上抄录并且总结!

在java中,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal

注意事项:如果需要精确计算,非要用String来够造BigDecimal

最后摘录网上的一个程序员写的精确工具类,在很多文章中都有此代码,可以参考下

Java代码  

importjava.math.BigDecimal;

/**

*@authorJstar

*/

publicclassArith{

//默认除法运算精度

privatestaticfinalintDEF_DIV_SCALE=10;

//这个类不能实例化

privateArith(){

}

/**

*提供精确的加法运算

*@paramv1被加数

*@paramv2加数

*@return两个参数的和

*/

publicstaticdoubleadd(doublev1,doublev2){

BigDecimalb1=newBigDecimal(Double.toString(v1));

BigDecimalb2=newBigDecimal(Double.toString(v2));

returnb1.add(b2).doubleValue();

}

/**

*提供精确的减法运算

*@paramv1被减数

*@paramv2减数

*@return两个参数的差

*/

publicstaticdoublesub(doublev1,doublev2){

BigDecimalb1=newBigDecimal(Double.toString(v1));

BigDecimalb2=newBigDecimal(Double.toString(v2));

returnb1.subtract(b2).doubleValue();

}

/**

*提供精确的乘法运算

*@paramv1被乘数

*@paramv2乘数

*@return两个参数的积

*/

publicstaticdoublemul(doublev1,doublev2){

BigDecimalb1=newBigDecimal(Double.toString(v1));

BigDecimalb2=newBigDecimal(Double.toString(v2));

returnb1.multiply(b2).doubleValue();

}

/**

*提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入

*@paramv1被除数

*@paramv2除数

*@return两个参数的商

*/

publicstaticdoublediv(doublev1,doublev2){

returndiv(v1,v2,DEF_DIV_SCALE);

}

/**

*提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。

*@paramv1被除数

*@paramv2除数

*@paramscale表示表示需要精确到小数点以后几位。

*@return两个参数的商

*/

publicstaticdoublediv(doublev1,doublev2,intscale){

if(scale<0){

thrownewIllegalArgumentException(

"Thescalemustbeapositiveintegerorzero");

}

BigDecimalb1=newBigDecimal(Double.toString(v1));

BigDecimalb2=newBigDecimal(Double.toString(v2));

returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

/**

*提供精确的小数位四舍五入处理。

*@paramv需要四舍五入的数字

*@paramscale小数点后保留几位

*@return四舍五入后的结果

*/

publicstaticdoubleround(doublev,intscale){

if(scale<0){

thrownewIllegalArgumentException(

"Thescalemustbeapositiveintegerorzero");

}

BigDecimalb=newBigDecimal(Double.toString(v));

BigDecimalone=newBigDecimal("1");

returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/80602.html

更多阅读

香水使用方法如何正确使用香水 擦香水的正确方法

香水使用方法如何正确使用香水——简介现在都市生活的人,出门的时候,在身上喷点香水以给别人留下好点的印象,但是你知道香水的正确使用方法吗?香水使用方法如何正确使用香水——方法/步骤香水使用方法如何正确使用香水 1、香水如何使用

详解暖宝宝的使用方法 暖宝宝使用方法

暖宝宝能够快速热敷、消肿、止痛、活血化瘀,广泛适用于各种畏寒症。并能快速缓解并消除各种畏寒疾病引起的疼痛,是关节炎、肩周炎、腰腿痛、风湿及类风湿、四肢发凉、患处遇寒疼痛等疾病患者迅速止痛的即开即用型产品。详解暖宝宝的使

避孕套的正确使用方法图解 如何使用避孕套图解

避孕套的正确使用方法(图解)——简介正确的使用避孕套才不会导致避孕失败避孕套的正确使用方法(图解)——方法/步骤避孕套的正确使用方法(图解) 1、选择适合自己的避孕套,不能过大或过小。打开包装向避孕套内吹气,如果漏气就说明这个套套破

用发蜡打理头发的方法 男发蜡使用方法

用发蜡打理头发的方法——简介发蜡是一种凝胶状或半固体状的油脂,能够固定发型、使头发亮丽有光泽,就是一种改良的发胶。发蜡分为高光和哑光两种。使用发蜡能够很好的打理头发。用发蜡打理头发的方法——工具/原料发蜡用发蜡打理头

最详细的复印机的使用方法 复印机的使用方法图解

最详细的复印机的使用方法——简介复印机用起来还是要提前知道一些知识的,因为并不是傻瓜式的放上就可以复印的,在使用之前你要详细的了解下这几个步骤方法,用起来才会更方便。最详细的复印机的使用方法——方法/步骤

声明:《BigDecimal类方法封装实际使用 bigdecimal》为网友薄凉小伙分享!如侵犯到您的合法权益请联系我们删除