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-06-21:golang选择题,以下golang代码输出什么?A:3;B:4;C:100;D:编译失败。 package main import ( “fmt“ ) func

    2022-06-21:golang选择题,以下golang代码输出什么?A:3:B:4:C:100:D:编译失败. package main import ( "fmt" ) fu ...

  2. 2022-05-09:k8s安装lalserver流媒体服务器,yaml如何写?

    2022-05-09:k8s安装lalserver流媒体服务器,yaml如何写? 答案2022-05-09: yaml如下: apiVersion: apps/v1 kind: Deployment ...

  3. IBM小型机 - 登录Web控制台

    前言: IBM 小型机没有VGA或者HDMI接口,只能通过web或者串口的方式,配置和查看设备的硬件信息: 我们可以通过两种方式获取小型机的IP,并通过浏览器访问. 操作步骤: 1.服务器接通电源,直 ...

  4. weex create test-app Error: Cannot find module '../package.json'

    weex create 报错 D:\YLKJPro>weex create test-app Error: Cannot find module '../package.json' at Fun ...

  5. MySQL的sql语句执行流程(简述)

    导言: MySQL和服务器端对接的时候,我们知道一般就是服务器端会打包一些SQL命令去增删改查数据库,这个打包的数据库SQL语句数据包一般为4MB,再大一些就不会被数据库端接收了 但是我们可以自己更改 ...

  6. 终极指南!Terraform的进阶技巧

    如果您已经对 Terraform 了如指掌,并期望自己的 IaC 技能有进一步提升的话,这篇文章很适合您!在本文中,我们将分享一些 Terraform 的高级使用技巧.从使用模块(module).工作 ...

  7. js递归生成树形结构

    先看结果 结果 [ { "id": 1, "title": "张三", "parent_id": -1, "c ...

  8. Rust的类型系统

    Rust的类型系统 类型于20世纪50年代被FORTRAN语言引入,其相关的理论和应用已经发展得非常成熟.现在,类型系统已经成为了各大编程语言的核心基础. 通用基础 所谓类型,就是对表示信息的值进行的 ...

  9. 前端Vue仿滴滴打车百度地图定位查找附近出租车或门店信息(更新版)

    前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12982 效果图如下 ...

  10. PHP文件包含总结

    1.文件包含小知识 1.1 包含函数 PHP共有4个与文件包含相关的函数: include require include_once require_once include与include_once ...