Java10-BigDecimal使用(位数、舍入、计算、比较、绝对值)
1、保留位数与舍入
1、BigDecimal.setScale(newScale, roundingMode)方法用于格式化小数点
newScale表示保留位数,roundingMode表示舍入模式,舍入模式一共有8种,其值分别从0到7。
ROUND_UP:0; // 向上舍入,远离零方向舍入
ROUND_DOWN:1; // 向下舍入,向零方向舍入
ROUND_CEILING:2; // 向正无限大方向舍入
ROUND_FLOOR:3; // 向负无限大方向舍入
ROUND_HALF_UP:4; // 四舍五入:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向上舍入
ROUND_HALF_DOWN:5; // 五舍四入:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向下舍入
ROUND_HALF_EVEN:6; // 向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入
ROUND_UNNECESSARY:7; // 用于断言请求的操作具有精确结果,因此不发生舍入
roundingMode参数在书写过程中可以用左边的写法,也可以用右边值代替。
举例:
public static void main(String[] args) throws ParseException {
BigDecimal data = new BigDecimal("2.346");
BigDecimal data1 = data.setScale(2,4); // 四舍五入
BigDecimal data2 = data.setScale(2,BigDecimal.ROUND_HALF_UP);// 四舍五入
BigDecimal data3 = data.setScale(2, BigDecimal.ROUND_UP);// 向上取入
BigDecimal data4 = data.setScale(2,BigDecimal.ROUND_DOWN); // 向下取入
BigDecimal data5 = data.setScale(2,BigDecimal.ROUND_HALF_EVEN);//向最接近的舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入
System.out.println(data1); // 2.35
System.out.println(data2); // 2.35
System.out.println(data3); // 2.35
System.out.println(data4); // 2.34
System.out.println(data5); // 2.35
}
2、加减乘除计算
2.1 加法 add()
2.2 减法 subtract()
2.3 乘法 multiply()
2.4 除法 divide()
举例:
public static void main(String[] args) throws ParseException {
BigDecimal data1 = new BigDecimal("2.346");
BigDecimal data2 = new BigDecimal("2.3");
System.out.println(data1.add(data2)); // 4.646
System.out.println(data1.subtract(data2)); // 0.046
System.out.println(data1.multiply(data2)); // 5.3958
System.out.println(data1.divide(data2)); // 2.02
}
3、大小比较
BigDecimal使用compareTo() 方法比较大小,输出为0则相等,为1则前面的大,为-1则后面的大
举例:
public static void main(String[] args) throws ParseException {
BigDecimal data1 = new BigDecimal("2.346");
BigDecimal data2 = new BigDecimal("2.3");
if (data1.compareTo(data2) == 0) {
System.out.println("相等");
}
if (data1.compareTo(data2) > 0) {
System.out.println("data1大"); // 输出
}
if (data1.compareTo(data2) < 0) {
System.out.println("data1小");
}
}
4、绝对值
4.1 直接获取绝对值:abs()
BigDecimal data1 = new BigDecimal("-2.346");
System.out.println(data1.abs()); //2.346
4.2 获取绝对值指定精度:abs(MathContext)
MathContext mc = new MathContext(2);
BigDecimal data1 = new BigDecimal("-2.346");
System.out.println(data1.abs(mc));//2.3