1.使用理由:

  • Double类和Float类可以对16位有效数字的数进行精确运算,但对于超过16位有效数字的数,会丢失精度。所以使用BigDecimal类来精确计算超过16位有效数字的数。

2.引入包:

  • import java.math.BigDecimal;

3.构造方法:

  • BigDecimal(E):创建一个具有参数所指定类型的对象
  • 使用样例:
    Scanner sc=new Scanner(System.in);
    BigDecimal b= new BigDecimal(0.1);
    BigDecimal c= new BigDecimal("0.1");
    BigDecimal a=sc.nextBigDecimal();
    System.out.println("输入值位:"+a);
    System.out.println("用浮点型创建:"+b);
    System.out.println("字符串类型创建:"+c);
  • 结果分析:输入值创建具有可预知性,但双精度浮点型创建具有一定的不可预知性。用String创建的值是准确的。
    输入值位:0.1
    用浮点型创建:0.1000000000000000055511151231257827021181583404541015625
    字符串类型创建:0.1

4.常用方法:

  • 加法:add(BigDecimal)

  • 减法:subtract(BigDecimal) 返回值:BigDecimal

  • 乘法:multiply(BigDecimal) 返回值:BigDecimal

  • 除法:divide(BigDecimal) 返回值:BigDecimal

  • 转换:toString(),intValue(),floatValue()

  • 比较:campareTo(BigDecimal) 返回值:1 表示 >,0 表示 =,-1 表示 <

5.易错提示:

  • 除法的异常提醒:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

  • 示例代码:

    public static void main(String []args){
    Scanner sc=new Scanner(System.in);
    BigDecimal b= new BigDecimal(1);
    BigDecimal c= new BigDecimal("0.1");
    BigDecimal a= new BigDecimal(3);
    System.out.println(b.divide(a));
    }
  • 解决方法:设置精确小数位。

    BigDecimal java.math.BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
    BigDecimal:表示被除数
    divisor:表示除数
    scale:表示精确位数
    roundingMode:表示舍入模式
    java提供的模式:
      四舍五入:Bigdecimal.ROUND_HALF_UP
      五舍六入:Bigdecimal.ROUND_HALF_DOWN
      向上取整:Bigdecimal.ROUND_CEILING
      向下取整:Bigdecimal.ROUND_FLOOR
      等.....
  • 示例代码:

    public static void main(String []args){

            Scanner sc=new Scanner(System.in);
            BigDecimal b= new BigDecimal(1);
            BigDecimal c= new BigDecimal("0.1");
            BigDecimal a= new BigDecimal(3);
            System.out.println(b.divide(a,2,BigDecimal.ROUND_CEILING));
        }

Java BigDecimal 分析的更多相关文章

  1. java bigDecimal and double

    Java BigDecimal和double   BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一 ...

  2. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  3. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  4. 浅谈java性能分析

    浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...

  5. TDA - Thread Dump Analyzer (Java线程分析工具)

    TDA - Thread Dump Analyzer (Java线程分析工具)http://automationqa.com/forum.php?mod=viewthread&tid=2351 ...

  6. JAVA 可视化分析工具 第12节

    JAVA 可视化分析工具  第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...

  7. Java 反射 分析类和对象

    Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...

  8. 深入理解JVM(八)——java堆分析

    上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...

  9. Java集合分析

    Java集合分析 前言 从开始接触Java的时候, 就在强调的一个重要版块, 集合. 终于能够开始对它的源码进行分析, 理解, 如果不懂得背后的思想, 那么读懂代码, 也仅仅是读懂了 if else ...

  10. JVM学习--(八)java堆分析

    上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...

随机推荐

  1. 2022-11-14:rust语言,请使用过程宏给结构体AAA生成结构体AAABuilder和创建AAABuilder实例的方法。 宏使用如下: #[derive(Builder)] pub stru

    2022-11-14:rust语言,请使用过程宏给结构体AAA生成结构体AAABuilder和创建AAABuilder实例的方法. 宏使用如下: #[derive(Builder)] pub stru ...

  2. 2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一

    2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥. :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值. 对于连续的一 ...

  3. 2020-12-04:mysql 表中允许有多少个 TRIGGERS?

    福哥答案2020-12-04: 在 Mysql 表中允许有六个触发器,如下:BEFORE INSERTAFTER INSERTBEFORE UPDATEAFTER UPDATEBEFORE DELET ...

  4. Vue根据时间戳制作倒计时15分钟

    废话不多说直接上代码 <script> export default { data() { return { downTimeShow: true, timer: null, downTi ...

  5. Luogu1772 [ZJOI2006] 物流运输

    传送门 简化题意 给你 \(m\) 个码头,码头之间有双向边连接,\(n\) 天,其中一些码头在某些天会不可用,这 \(n\) 天都要有一条从 \(1\) 到 \(m\) 的路,每一次更换道路会需要 ...

  6. React笔记-Hooks(九)(非常全面)

    React笔记-Hooks(九) Hooks 概念 React Hooks 的意思是 组件尽量写成纯函数 如果需要外部功能和副作用 就用钩子把外部代码"钩"进来 函数组件和类组件区 ...

  7. 你还在用Object.equals()方法吗?

    前言 当<阿里巴巴Java开发手册>发布后,我也是仔细进行了阅读,想从中找出一些"标准",让自己的代码质量提高.手册中对 Object 的 equals 方法的使用进行 ...

  8. jvm中类和对象定义存储基础知识

    1 类文件数据结构类型 Class文件结构主要有两种数据结构:无符号数和表 •无符号数:用来表述数字,索引引用.数量值以及字符串等,比如 图1中类型为u1,u2,u4,u8分别代表1个字节,2个字节, ...

  9. 疑难杂记:Chirp信号相关的参数解释

    图1 FMCW雷达信号参数 在德州仪器TI毫米波雷达中,开发板参数配置往往涉及如图1所示的信号参数. 宏观上看,信号参数包括\(ADC\)采样时间.脉冲重复周期(\(Chirp\)扫频周期)和帧时间( ...

  10. OpenAI发布ChatGPT函数调用和API更新

    2023年6月13日,OpenAI针对开发者调用的API做了重大更新,包括更易操控的 API模型.函数调用功能.更长的上下文和更低的价格. 在今年早些时候发布gpt-3.5-turbo,gpt-4在短 ...