zoukankan      html  css  js  c++  java
  • Java

    前言

    记录BigDecimal的一些应用,BigDecimal对超过16位有效位的数提供了精确的运算支持。


    具体应用

    构造器

    BigDecimal num1 = new BigDecimal("5"); // String 推荐使用
    BigDecimal num2 = new BigDecimal(5); // int
    BigDecimal num3 = new BigDecimal(2147483648L); // Long
    BigDecimal num4 = new BigDecimal(new Double("12.12")); // Double  不推荐使用,精度丢失
    
    System.out.println(num1); // 5
    System.out.println(num2); // 5
    System.out.println(num3); // 2147483648
    System.out.println(num4); // 12.1199999999999992184029906638897955417633056640625
    

    加减乘除运算

     BigDecimal num1 = new BigDecimal("5");
     BigDecimal num2 = new BigDecimal("2");
    
     // 加法
     System.out.println(num1.add(num2)); // 7
     // 减法
     System.out.println(num1.subtract(num2)); // 3
     // 乘法
     System.out.println(num1.multiply(num2)); // 10
     // 除法
     System.out.println(num1.divide(num2)); // 2.5
    

    比较大小

    • BigDimical 的大小比较使用用 compareTo 方法
    /**
     * 大小比较
     * compare = -1,表示num1小于num2;
     * compare = 0,表示num1等于num2;
     * compare = 1,表示num1大于num2;
     */
    int compare = num1.compareTo(num2);
    System.out.println(compare); // 1
    

    divide方法注意问题

    • BigDecimal 做除法的时候注意出现无限循环
    BigDecimal num1 = new BigDecimal("1");
    BigDecimal num2 = new BigDecimal("3");
    
    System.out.println(num1.divide(num2)); // 0.333333333333
    
    • 运行异常
    Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    
    • 解决方法:指定保留的小数的位数
    System.out.println(num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP));
    
    • 语法:divide(BigDecimal,保留小数点后几位小数,小数保留模式)

    RoundingMode 小数保留模式

    保留模式 说明
    ROUND_CEILING 向正无穷方向舍入
    ROUND_FLOOR 向负无穷方向舍入
    ROUND_HALF_UP 四舍五入
    ROUND_HALF_DOWN 五舍六入
    ROUND_HALF_EVEN 银行家算法,四舍六入五考虑,五后非空就进一,五后为空看奇偶,五前为偶应舍去,五前为奇要进一
    ROUND_UNNECESSARY 无需舍位
    ROUND_UP 向远离零的方向舍入
    ROUND_DOWN 向零方向舍入

    - End -
    梦想是咸鱼
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    葡萄城报表介绍:数据报表的七个原则
    while(scanf("%d",&n)!=EOF)
    不容易系列之(3)—— LELE的RPG难题
    错排公式
    _​_​i​n​t​6​4​ ​与​l​o​n​g​ ​l​o​n​g​ ​i​n​t
    杭电ACM 2046 阿牛的EOF牛肉串
    C++Builder 中使用 __int64 整数的问题
    折线分平面——杭电2050
    复合梯形公式与复合辛普森公式求积分
    两套蓝桥杯热身题
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15176470.html
Copyright © 2011-2022 走看看