您的位置 首页 java

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无效

文章来源:智云一二三科技

文章标题:java中用于计算金钱的类 BigDecimal使用细节

文章地址:https://www.zhihuclub.com/190929.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图