网站首页 > java教程 正文
注意:
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无效
猜你喜欢
- 2024-10-01 大数据必学Java基础(十五):算术运算符
- 2024-10-01 Java大拿才知道的这些运算规则和注意事项,你也都知道吧?
- 2024-10-01 Java BigDecimal类型的 加减乘除运算和比较
- 2024-10-01 Java基础|加减乘除计算(java加减乘除math)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)