工具类代码:
package com.ykl.studyMaterials.util;
import java.math.BigDecimal;
/**
* BigDecimal的基本操作
*
* @author ykl
*
*/
public class BigDecimalUtil {
public static void main(String[] args) {
// 注:初始化一般使用String
BigDecimal num1 = new BigDecimal("32.6");
BigDecimal num2 = new BigDecimal("3.8");
BigDecimal num3 = new BigDecimal("-2.35");
BigDecimal num4 = new BigDecimal("3.141590654");
BigDecimal num5 = new BigDecimal("-3.141590654");
// 加法
BigDecimal addRes = num1.add(num2);
System.out.println("加法add(32.6+3.8)=" + addRes);
// 减发
BigDecimal subRes = num1.subtract(num2);
System.out.println("减法subtract(32.6-3.8)=" + subRes);
// 乘法
BigDecimal mulRes = num1.multiply(num2);
System.out.println("乘法multiply(32.6*3.8)=" + mulRes);
// 除法
BigDecimal divRes = num1.divide(num2, 6, BigDecimal.ROUND_HALF_UP);
System.out.println("除法divide(32.6/3.8)=" + divRes);
// 绝对值
BigDecimal absRes = num3.abs();
System.out.println("绝对值(-2.35)" + absRes);
// 四舍五入
int scale = num4.scale();
System.out.println("小数位数(3.141590654):" + scale);
BigDecimal scaRes = null;
// ROUND_UP 对非零舍弃部分前面的数字加1
scaRes = num4.setScale(2, BigDecimal.ROUND_UP);
System.out.println("ROUND_UP:" + scaRes);
// ROUND_DOWN 截取小数位,不对保留位数处理
scaRes = num4.setScale(2, BigDecimal.ROUND_DOWN);
System.out.println("ROUND_UP:" + scaRes);
// ROUND_CEILING 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同
scaRes = num4.setScale(2, BigDecimal.ROUND_CEILING);
System.out.println("ROUND_CEILING(正):" + scaRes);
scaRes = num5.setScale(2, BigDecimal.ROUND_CEILING);
System.out.println("ROUND_CEILING(负):" + scaRes);
// ROUND_FLOOR 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;如果为负,则舍入行为与 ROUND_UP 相同
scaRes = num4.setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println("ROUND_FLOOR(正):" + scaRes);
scaRes = num5.setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println("ROUND_FLOOR(负):" + scaRes);
// ROUND_HALF_UP 四舍五入(舍弃部分>=0.5时加1)
scaRes = num4.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("ROUND_HALF_UP:" + scaRes);
// ROUND_HALF_DOWN 舍弃部分>0.5时加1
scaRes = num4.setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println("ROUND_HALF_DOWN:" + scaRes);
// ROUND_HALF_EVEN 如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同;例:1.15>1.2 1.25>1.2
scaRes = num4.setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println("ROUND_HALF_EVEN:" + scaRes);
// ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入(运算结果为无限小数的情况下会报错)
scaRes = num4.setScale(9, BigDecimal.ROUND_UNNECESSARY);
System.out.println("ROUND_UNNECESSARY:" + scaRes);
}
}