• 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
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    python 求取代码运行时间
    Python中的继承、抽象基类和接口
    Python安装和环境配置,让你轻松入门学习Python!
    python入门python的基本语法
    没有对象?程序员的浪漫,对象攻略(1)
    python实现邮件循环自动发件
    docker查看全部容器命令
    python speech模块的使用方法
    开宗立派宣言
    多个 (li) 标签如何获取获取选中的里面的某个特定值
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15176470.html
Copyright © 2020-2023  润新知