Java中常用API总结(7)—— BigDecimal类

news/2024/10/18 16:50:09/

BigDecimal类

  • 一、前言
  • 二、概述
    • 1.API帮助文档
    • 2.使用方法
  • 三、常见方法
    • 1.格式
    • 2.实例
    • 3.报错
    • 4.解决方法
  • 四、结语


一、前言

在使用float或者double类型的数据在进行数学运算的时候,很有可能会产生 精度丢失问题

我们都知道计算机底层在进行运算的时候,使用的都是二进制数据

当我们在程序中写了一个十进制数据 ,在进行运算的时候,计算机会将这个十进制数据转换成二进制数据,然后再进行运算,计算完毕以后计算机会把运算的结果再转换成十进制数据给我们展示

如果我们使用的是整数类型的数据进行计算,那么在把十进制数据转换成二进制数据的时候不会存在精度问题

如果我们的数据是一个浮点类型的数据,有的时候计算机并不会将这个数据完全转换成一个二进制数据,而是将这个将其转换成一个 无限的趋近于这个十进数的二进制数据

这样使用一个不太准确的数据进行运算的时候, 最终就会造成精度丢失

为了提高精度,Java就给我们提供了 BigDecimal 供我们进行数据运算

二、概述

1.API帮助文档

BigDecimal所在包是在java.math包下,因此在使用的时候就需要进行导包。我们可以使用BigDecimal类进行更加精准的数据计算。

2.使用方法

使用的时候就需要进行导包

三、常见方法

构造方法如图所示,接下来重点讲述成员方法
在这里插入图片描述

1.格式

public BigDecimal add(BigDecimal value)				// 加法运算
public BigDecimal subtract(BigDecimal value)		// 减法运算
public BigDecimal multiply(BigDecimal value)		// 乘法运算
public BigDecimal divide(BigDecimal value)			// 触发运算

2.实例

public class BigDecimalDemo01 {public static void main(String[] args) {// 创建两个BigDecimal对象BigDecimal b1 = new BigDecimal("0.3") ;BigDecimal b2 = new BigDecimal("4") ;// 调用方法进行b1和b2的四则运算,并将其运算结果在控制台进行输出System.out.println(b1.add(b2));         // 进行加法运算System.out.println(b1.subtract(b2));    // 进行减法运算System.out.println(b1.multiply(b2));    // 进行乘法运算System.out.println(b1.divide(b2));      // 进行除法运算}}

输出结果

4.3
-3.7
1.2
0.075

3.报错

如果使用BigDecimal类型的数据进行除法运算的时候,得到的结果是一个无限循环小数,那么就会报错:ArithmeticException

public class BigDecimalDemo02 {public static void main(String[] args) {// 创建两个BigDecimal对象BigDecimal b1 = new BigDecimal("1") ;BigDecimal b2 = new BigDecimal("3") ;// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出System.out.println(b1.divide(b2));}}

运行结果
在这里插入图片描述

4.解决方法

此时我们就需要使用到BigDecimal类中另外一个divide方法

//divisor:			除数对应的BigDecimal对象;
//scale:				精确的位数;
//roundingMode:		取舍模式;BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
import java.math.BigDecimal;
import java.math.RoundingMode;public class demo1 {public static void main(String[] args) {// 调用方法method_03() ;method_02() ;method_01() ;}// 演示取舍模式HALF_UPpublic static void method_03() {// 创建两个BigDecimal对象BigDecimal b1 = new BigDecimal("0.3") ;BigDecimal b2 = new BigDecimal("4") ;// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出System.out.println(b1.divide(b2 , 2 , RoundingMode.HALF_UP));}// 演示取舍模式FLOORpublic static void method_02() {// 创建两个BigDecimal对象BigDecimal b1 = new BigDecimal("1") ;BigDecimal b2 = new BigDecimal("3") ;// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR));}// 演示取舍模式UPpublic static void method_01() {// 创建两个BigDecimal对象BigDecimal b1 = new BigDecimal("1") ;BigDecimal b2 = new BigDecimal("3") ;// 调用方法进行b1和b2的除法运算,并且将计算结果在控制台进行输出System.out.println(b1.divide(b2 , 2 , RoundingMode.UP));}
}

输出结果

0.08
0.33
0.34

四、结语

接下来将讲述时间类


http://www.ppmy.cn/news/11171.html

相关文章

JavaScript享元模式与开发实践(上)

前言 作为一个前端切图仔,少有和各类设计模式打交道。但这不影响我们学习设计模式的思维,来提升我们的代码水平。 本章通过讲解享元模式,希望能够让你对设计模式更一步的学习。 本章学习内容👇 认识享元模式 享元模式 什么是…

CSS入门一、初识

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

笔试题-2023-锐捷-FPGA【个人解答版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.01应聘岗位:FPGA工程师题目评价 难易程度:☆☆☆☆☆知识覆盖:★★☆☆☆超纲范围:☆☆☆☆☆值得一刷:★★☆☆☆文章目录 单…

SpringBoot整合Redis实现优惠券秒杀服务(笔记+优化思路版)

本文属于看黑马的redis的学习笔记,记录了思路和优化流程,精简版最终版请点击这里查看。 文章目录一、全局ID生成器1.1 理论1.1.1 全局唯一ID生成策略1.2 代码(Redis自增)二、实现优惠券秒杀下单2.1 SQL2.2 SQL对应实体类2.2.1 普通券实体类2.2.2 秒杀券实…

【年终总结】我的前端之行,回顾2022,展望2023

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏&#xff…

JavaScript职责链模式与开发实践(下)

前言 作为一个前端切图仔,少有和各类设计模式打交道。但这不影响我们学习设计模式的思维,来提升我们的代码水平。 本章通过讲解职责链模式,希望能够让你对设计模式更一步的学习。 本章学习内容👇 灵活可拆分的职责链模式 灵活…

(十六)一篇文章学会Java的常用API

目录 前言: 一、Object:toStringequals 二、StringBuilder 三、Math 四、System 五、BigDecimal 前言: API的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实…

【Redis】缓存穿透问题及其解决方案

【Redis】缓存穿透问题及其解决方案 文章目录【Redis】缓存穿透问题及其解决方案1. 缓存穿透概念及原因2. 解决方案2.1 缓存空对象2.1.1 缓存空对象的优缺点2.1.2 改进代码2.2 布隆过滤2.2.1 布隆过滤的优缺点1. 缓存穿透概念及原因 缓存穿透:客户端请求的数据在 缓…