0
点赞
收藏
分享

微信扫一扫

BigDecimal运算

老王420 2022-05-03 阅读 82

四则运算 + 绝对值

注意:在使用BigDecimal时我们需要注意它的大部分方法都不会改变原始的值,因为初始化BigDecimal是创建一个了个对象,使用其方法后需要创建BigDecimal去接收新值。

加法: add()函数


        BigDecimal num1 = new BigDecimal("1");
        BigDecimal num2 = new BigDecimal("1");
        
		BigDecimal result = num1.add(num2); 
		System.out.println(result); // 结果 2
        // 或者
        num1 = num1.add(num2);
        System.out.println(num1); // 结果 2
        

减法: subtract()函数


        BigDecimal num1 = new BigDecimal("2");
        BigDecimal num2 = new BigDecimal("1");
        
		BigDecimal result = num1.subtract(num2); 
		System.out.println(result); // 结果 1
        // 或者
        num1 = num1.subtract(num2);
        System.out.println(num1); // 结果 1
        

乘法: multiply()函数


        BigDecimal num1 = new BigDecimal("2");
        BigDecimal num2 = new BigDecimal("3");
        
		BigDecimal result = num1.multiply(num2); 
		System.out.println(result); // 结果 6
        // 或者
        num1 = num1.multiply(num2);
        System.out.println(num1); // 结果 6
        

除法: divide()函数


        BigDecimal num1 = new BigDecimal("10");
        BigDecimal num2 = new BigDecimal("5");
        /**
		 * divide(BigDecimal divisor)
		 * 除数为 0 或是除不尽时直接报ArithmeticException异常
		 */
		BigDecimal result = num1.divide(num2);
		System.out.println(result); // 结果 2
		/**
		 * divide(BigDecimal divisor, int roundingMode)
		 * divisor 除数
		 * int roundingMode 舍入模式
		 */
		BigDecimal result = num1.divide(num2, BigDecimal.ROUND_HALF_UP);
		System.out.println(result); // 结果 2
		/**
		 * divide(BigDecimal divisor, int scale, int roundingMode) 
		 * divisor 除数
		 * int scale 精确小数位
		 * int roundingMode 舍入模式
		 */
		BigDecimal result = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP);
		System.out.println(result); // 结果 2.00
		

绝对值: abs()函数


		/**
		 * 绝对值: 如果是正数直接返回,如果是负数返回它的正数
		 */
        BigDecimal num1 = new BigDecimal("1");
		BigDecimal result = num1.abs(); 
		System.out.println(result); // 结果 1

        BigDecimal num2 = new BigDecimal("-1");
		BigDecimal result = num2.abs(); 
		System.out.println(result); // 结果 1
        

舍入模式

舍入模式时有BigDecimal 常量 和 RoundingMode 枚举,其实两者并无任何区别,使用那种方式都可以。

BigDecimal 常量

  • 向上取整 ROUND_DOWN
  • 向下取整 ROUND_UP
  • 四舍五入 ROUND_HALF_UP
  • 五舍六入 ROUND_HALF_DOWN
  • 接近正无穷大的舍入 ROUND_CEILING
  • 接近负无穷大的舍入 ROUND_FLOOR
  • 向最接近的数字舍入 ROUND_HALF_EVEN
  • 计算结果是精确的,不需要舍入模式 ROUND_UNNECESSARY

RoundingMode 枚举

  • UP(BigDecimal.ROUND_UP)
  • DOWN(BigDecimal.ROUND_DOWN)
  • CEILING(BigDecimal.ROUND_CEILING)
  • FLOOR(BigDecimal.ROUND_FLOOR)
  • HALF_UP(BigDecimal.ROUND_HALF_UP)
  • HALF_DOWN(BigDecimal.ROUND_HALF_DOWN)
  • HALF_EVEN(BigDecimal.ROUND_HALF_EVEN)
  • UNNECESSARY(BigDecimal.ROUND_UNNECESSARY)

		// 常用示例
        BigDecimal num1 = new BigDecimal("22.5");
        BigDecimal num2 = new BigDecimal("10");
        
		BigDecimal result = num1.divide(num2, BigDecimal.ROUND_UP);
		System.out.println(result); // 2.25向上取整结果2.3
		BigDecimal result = num1.divide(num2, BigDecimal.ROUND_DOWN);
		System.out.println(result); // 2.25向下取整结果2.2
		BigDecimal result = num1.divide(num2, BigDecimal.ROUND_HALF_UP);
		System.out.println(result); // 2.25四舍五入结果2.3
		BigDecimal result = num1.divide(num2, BigDecimal.ROUND_HALF_DOWN);
		System.out.println(result); // 2.25五舍六入结果2.2

		

举报

相关推荐

0 条评论