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

news2024/10/7 4:37:10

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_UP
    public 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));

    }

    // 演示取舍模式FLOOR
    public 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));

    }

    // 演示取舍模式UP
    public 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.coloradmin.cn/o/154455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Echarts image 使用

通过image://...xx.png 在扇形图中可能会失败,可以将需要载入的img转换成base64直接载入可以通过背景色来载入图片 backgroundColor: {image: xxx/xxx.jpg },实例(扇形图):var option {tooltip: {trigger: "item",show…

如何用用C++实现通达信接口调用?有哪些技巧

c作为三大计算机语言之一,在编程时很受投资者的偏爱,特别是在通达信接口软件开发时C更是担任着重要的开发角色,今天小编就来和大家说一下如何用C实现通达信接口调用? 用C查询股份数据代码(部分) std::cou…

C4D和Maya哪个学起来更容易

Maxon Cinema 4D和 Autodesk Maya 是最著名的两种 3D 软件,艺术家和工作室经常在许多领域使用它们。它们都有不同的功能,在本文中,让我们对它们进行比较。我们将尝试向您概述它们之间的主要区别,以及这两者的功能。哪一个更容易使…

2: [SpringData集成Elasticsearch] --- 配置打印命令日志

文章目录一:引入SpringDataElasticsearch依赖二:创建RestHighLevelClient配置类三:配置YML: logging.level --- 日志等级三:请求接口,查看日志3.1:请求代码3.2:Postman请求地址3.3&a…

LayoutInflater学习(一)之布局解析

LayoutInflater的创建与实例化 LayoutInflater是位于 "android.view" 包下的一个抽象类,同样它也是一个系统级服务 package android.view; SystemService(Context.LAYOUT_INFLATER_SERVICE) public abstract class LayoutInflater { LayoutInflater是用来解析 xml…

桌面录屏软件,分享3个十分便捷的录屏软件

​图片和视频都是人们传播信息的方式,不过相比于图片,视频能够更加直观生动的表达信息。在日常生活中,除了屏幕上记录一些应用程序的内容外,有时我们还需要记录电脑桌面。有更好的桌面录屏软件吗?当然,小编…

Git操作不规范,战友提刀来相见!

年终奖都没了,还要扣我绩效,门都没有,哈哈。 这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。 文末留言抽奖,聊聊你的年终奖。 问题描述 小A和…

C++多线程(并发、进程、线程的基本概念和综述)

并发、进程、线程的基本概念和综述 并发 并发表示两个或者更多任务(独立的活动)同时发生(进行)。例如,一面唱歌一面弹琴,一面走路一面说话,画画的时候听小说等。回归到计算机领域,所谓并发,就是一个程序同时执行多个…

html 3D立体多形态旋转音乐相册 | 2022都结束了,还不快给女神制作一个特殊的纪念相册

📋 前言 🖱 博客主页:在下马农的碎碎念✍ 本文由在下马农原创,首发于CSDN📆 首发时间:2023/01/07📅 最近更新时间:2023/01/07🤵 此马非凡马,房星本是星。向前…

零基础掌握IP地址知识,小白必学知识点!

前言 大家好,在生活中我们使用具有上网功能的电子设备都有IP地址,就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6,我们所说的的IP地址指的是IPV4的地址。 正文 IPV4( Internet Protocol Version 4 )互联协议版本4,有版本V4之…

【HTML+CSS+JavaScript】动感爱心—— I love you~

有段时间没有分享了,no time。 还是抽出一会儿分享一下。有时间会解析的(具体…I don’t know)。 1. 效果展示 真实效果挺好看的,喜欢的朋友,可以给你的女朋友或者喜欢的TA看看呀! 可以根据实际情况修改文案,比如诗歌,或者你爱的人的名字哦~ 2. 源代码分享 2.1 动感…

在Ubuntu上安装docker(Ubuntu版本18.04)

在Ubuntu上安装docker详细步骤1、卸载之前的docker版本2、安装docker仓库3、在系统中添加Docker的官方密钥4、添加docker源5、再次更新源列表6、查看可以安装的docker版本并安装docker7、使用命令查看是否安装成功以及安装的docker版本8、启动 docker服务并设置开机自动启动doc…

FPGA基础之modelsim常见问题

目录 问题一:modelsim破解失败 1)现象 2)原因 ​ 3) 解决 问题一:modelsim破解失败 1)现象 modelsim激活失败,原先正常使用过的,重新卸载安装破解,设置环境变量…

Serverless 奇点已来,下一个十年将驶向何方?

本文整理自 QCon 上海站 2022 丁宇(叔同)的演讲内容。 以前构建应用,需要买 ECS 实例,搭建开源软件体系然后维护它,流量大了扩容,流量小了缩容,整个过程非常复杂繁琐。 用了 Serverless 服务以…

【如何添加本地jar包到maven依赖】

如何添加本地jar包到maven依赖 1、本地jar包和对应依赖如下图(刚开始这俩依赖是报红的) 2、执行mvn命令如下: mvn install:install-file -DfileD:\ht_mesis-platform\mesis-business\dandian4-1.0.0.jar -Dpackagingjar -DgroupIddandian4…

Java实战:Hutool类库中的DateUtil用法总结

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️荣誉: CSDN博客专家、数据库优质创作者🏆&…

微信小程序 | 一比一复刻抖音短视频

📌个人主页:个人主页 ​🧀 推荐专栏:小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? …

Java中常用API总结(6)——BigInteger类

BigInteger类一、前言二、概述1.API帮助文档2.使用方法三、常见方法1.构造方法1️⃣格式2️⃣实例2.成员方法1️⃣格式2️⃣实例四、注意事项五、结语一、前言 平时在存储整数的时候,Java中默认是int类型,int类型有取值范围:-2147483648 ~ 2…

【深入理解JVM】内存模型

目录 运行时数据区域 程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 虚拟机对象探秘 对象的创建 对象的内存布局 运行时数据区域 程序计数器 程序计数器是一块较小的内存空间,存储当前线程所执行的字节码指令的地址。在java…

C#开发的资源文件程序(可国际化) - 开源研究系列文章

上次将小软件的线程池描述了,也将插件程序描述了,这次就将里面的资源文件相关的内容进行下记录,这里能够让程序做成国际化的形式(即多语言程序),主要就是通过这个资源文件的方式进行的处理。下面将对这个资源文件的定义进行描述&a…