玖叶教程网

前端编程开发入门

java中用于计算金钱的类 BigDecimal使用细节

注意:

1.当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf.否则达不到精确效果

简单运算:

bigDecimalA = bigDecimalA.add(bigDecimalB); // 加 +
bigDecimalA = bigDecimalA.subtract(bigDecimalB); // 减 -
bigDecimalA = bigDecimalA.multiply(bigDecimalB); // 乘 *
bigDecimalA = bigDecimalA.divide(bigDecimalB, 2, BigDecimal.ROUND_HALF_UP); // 除

三个参数依次为 //被除数 , 保留几位小数 , 舍入模式-四舍五入

注意:

BigDecimal除法可能出现不能整除的情况,比如 4.5/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result., 所以一般建议使用以下3个参数,上面那种,尽量不要直接除,舍入方式见下

ROUND_CEILING    //向正无穷方向舍入

ROUND_DOWN    //向零方向舍入

ROUND_FLOOR    //向负无穷方向舍入

ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 

                     例如1.55 保留一位小数结果为1.5

ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,

                      使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

ROUND_HALF_UP    //(四舍五入) 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,

                    向上舍入, 1.55保留一位小数结果为1.6

ROUND_UNNECESSARY    //计算结果是精确的,不需要舍入模式

ROUND_UP    //向远离0的方向舍入

需要对BigDecimal进行截断和四舍五入可用setScale方法,例:

BigDecimal a = new BigDecimal("4.5635");
a = a.setScale(2, RoundingMode.HALF_UP);    //保留2位小数,且四舍五入
System.out.println(a); //4.56

BigDecimal和其他类型计算时.可以直接new BigDecimal(integer...)然后采用BigDecimal的加减乘除计算

BigDecimal比较大小 :可以通过BigDecimal的compareTo方法来进行比较。
返回的结果是int类型,-1表示小于,0是等于,1是大于。

*除去BigDecimal 后面.00方法 BigDecimal .stripTrailingZeros().toPlainString(); 100.00 变成 100

仅对.00有效 .23无效

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言