Java中运用BigDecimal对字符串的数值进行加减乘除等操作

2023-09-21 08:30:00

系列文章目录

SpringBoot+Vue3实现登录验证码功能
Java实现发送邮件(定时自动发送邮件)
换个角度使用Redis去解决跨域存取Session问题
Redis缓存穿透、击穿、雪崩问题及解决方法
Spring Cache的使用–快速上手篇
List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)

更多该系列文章请查看我的主页哦



前言

  在实际开发时前端传值给到后端是String类型的数值时,当我们想对这些String类型的数值做加减乘除等例如int类型的操作时,我们将会用到BigDecimal去进行操作。但大家肯定会说这样我们强转类型,成为int类型后操作不是更加方便吗?为什么还要学这个?因为int类型上限,具体是什么上限相信大家写过高精度加减法的算法题会理解int类型的缺陷。所以我们在涉及高精度的加减乘除操作就需要用到了。具体怎么用请看下面的内容~


一、BigDecimal介绍

  Java在java.math包中提供的API类BigDecimal用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

简单来说,就是对更大或者更小的数进行运算和处理时用BigDecimal,在运用时需调用对应的方法去完成相应的操作。

二、加减乘除操作调用的方法

2.1 加法 add()

加法需调用add方法,直接new即可。代码如下所示,a.add(b)意思就是a+b
注意处理完后将值转换成String类型

		//加法 add
        System.out.println("***********加法*************");
        BigDecimal a = new BigDecimal("1.01");
        BigDecimal b = new BigDecimal("2.01");
        String result = a.add(b).toString();
        System.out.println("加法:add的使用----- a + b = "+a.toString()+"+"+b.toString()+" = "+result);

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

2.2 减法subtract()

减法需调用subtract方法。代码如下所示:a1.subtract(b1)意思就是a1-b1
注意处理完后将值转换成String类型

		System.out.println("***********减法*************");
        BigDecimal a1 = new BigDecimal("2.02");
        BigDecimal b1 = new BigDecimal("1.01");
        String result1 = a1.subtract(b1).toString();
        System.out.println("减法:subtract的使用----- a1 - b1 = "+a1.toString()+"-"+b1.toString()+" = "+result1);

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

2.3 乘法multiply()

乘法需调用multiply方法。代码如下所示:a2.multiply(b2)意思就是a2b2*
注意处理完后将值转换成String类型

		System.out.println("***********乘法*************");
        //乘法 multiply
        BigDecimal a2 = new BigDecimal("2.02");
        BigDecimal b2 = new BigDecimal("1.01");
        String result2 = a1.multiply(b1).toString();
        System.out.println("乘法(保留所有小数位):multiply的使用----- a2 * b2 = "+a2.toString()+"*"+b2.toString()+" = "+result2);

        String result3 = a1.multiply(b1).setScale(2, RoundingMode.HALF_UP).toString();
        System.out.println("乘法(保留2位小数):multiply的使用结合setScale----- a2 * b2 = "+a2.toString()+"*"+b2.toString()+" = "+result3);

运行效果图,在保留2位小数需调用setScale方法,代码中的’2’表示的就是2位小数
在这里插入图片描述

2.4 除法divide()

除法需调用divide方法。代码如下所示:a3.divide(b3)意思就是a3/b3
注意处理完后将值转换成String类型,必须指定小数位数!!!

		System.out.println("***********除法*************");
        BigDecimal a3 = new BigDecimal("2.03");
        BigDecimal b3 = new BigDecimal("1.01");
        //注意 如果出完后小数位太大会报错 像5/3=1.6666666666666~ 就会报错 一般不用
//        String result4 = a3.divide(b3).toString();
//        System.out.println("除法(保留所有小数位):divide的使用----- a3 / b3 = "+a3.toString()+"/"+b3.toString()+" = "+result4);

        //所以一般会直接用这种保留2位小数的写法
        String result5 = a3.divide(b3,2,RoundingMode.HALF_UP).toString();
        System.out.println("除法(保留2位小数):divide的使用----- a3 / b3 = "+a3.toString()+"/"+b3.toString()+" = "+result5);

运行效果图,需注意,这里必须要指定小数位数。不指定遇到循环小数会报错
在这里插入图片描述

三、 其它操作

3.1 绝对值abs()

绝对值需调用abs方法。代码如下所示:a4.abs()意思就是\a4\
注意处理完后将值转换成String类型

		//1.绝对值
        BigDecimal a4 = new BigDecimal("-1.2");
        BigDecimal result6 = a4.abs();
        System.out.println("取绝对值:abs的使用-----"+"|"+a4+"|"+" = "+result6);

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

3.2 比较大小compareTo()

比较大小需调用compareTo方法。代码如下所示:a5.compareTo(b5)意思就是a5>b5?
注意处理完后将值转换成String类型,大于返回1,等于返回0,小于返回-1

		//2.判断大小
        BigDecimal a5 = new BigDecimal("1.3");
        BigDecimal b5 = new BigDecimal("1.2");
        //a5是否大于b5
        int i = a5.compareTo(b5);  //(小于 返回-1) (等于 返回 0) (大于 返回 1)
        String result7="";
        if(i == -1){
            result7 = "小于";
        }
        if(i == 0){
            result7 = "等于";
        }
        if(i == 1){
            result7 = "大于";
        }
        System.out.println("比较大小:compareTo的使用----- a5是否大于b5 result = "+result7 +" i = "+i);

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


总结

  以上就是对于BigDecimal常用到的方法进行了代码及效果图的演示,相信大家看到这里也是能够运用起来对数值进行上述操作了吧!相信大家也对于BigDecimal有了一定的理解与认识吧!如遇到什么问题可以在评论区交流,我们一起学习进步哦~

更多推荐

C++ Primer Plus第八章笔记

内联函数编译过程的目标是可执行程序(由一组机器语言指令组成)。运行程序时,操作系统将指令载入到计算机内存中,则每条指令都有其特定的内存地址。内联函数的编译代码与其它程序代码内联,编译器就使用相应的函数代码替换函数调用。1.1常规函数和内联函数常规函数:调用使得程序调到另一个地址(函数的地址),并在函数结束时返回。将程序

合同管理软件功能有哪些?5大常用功能解析

合同管理软件,是建立在信息技术基础上,利用现代企业的先进管理思想,为企业提供决策、计划、控制与经营绩效评估的全方位、系统化的合同管理平台。它能够规范基础数据管理、提高合同管理的效率、让合同管理标准化。它为销售、法律、财务、采购和合同管理团队提供了一套方便的集成工具,让各团队都能够高效地对合同进行管理。合同管理软件是企业

「Docker」面试全攻略:深入解析Docker技术栈

这里写目录标题1.什么是Docker?2.Docker与虚拟机的区别是什么?3.Docker镜像和容器之间有何关系?4.如何构建自己的Docker镜像?5.如何将容器连接到外部网络?6.Docker的优势是什么?7.Dockerfile所用到的命令有哪些?8.docker所用到的命令有哪些?1.什么是Docker?Do

docker day02

昨日内容回顾:-docker架构-是C/S架构C:dockerS:dockerdaemon-image:-dockerhub仓库-高可用企业级私有仓库部署!-container-volume-network-...-imagedockerimage...lsrmpulltagsaveload...buildhistor

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的DShanMCU-RA6M5开发板进行编写,需要的同学可以在这里获取:https://item.taobao.com/item.htm?id=728461040949配套资料获取:https://renesas-docs.100ask.net瑞萨MCU零基础入门系列教程汇总:https://b

等级保护——Linux命令大全

等级保护——Linux命令大全1.基本命令uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/sda在磁盘上执行测试性读取操作系统信息arch显示机器的处理器

OpenCV学习笔记(6)_由例程学习高斯图像金字塔和拉普拉斯金字塔

1图像金字塔图像金字塔是图像多尺度表达的一种。尺度,顾名思义,可以理解为图像的尺寸和分辨率。处理图像时,经常对源图像的尺寸进行缩放变换,进而变换为适合我们后续处理的大小的目标图像。这个对尺寸进行放大缩小的变换过程,称之为尺度调整。图像金字塔则是图像多尺度调整表达的一种重要的方式,图像金字塔方法的原理是:将参加整合的每幅

系统运维(零):安装系统时挂载点设置不当导致的麻烦

笔者上一篇博文记录了本地化安装CentOS7的一些流程心得,但是在笔者首次安装的时候,根目录挂载点只分配了30G,/tmp也只分配了20G,这直接导致服务器在小小安装了GPU相关配置和一些依赖库之后,不仅docker占满/tmp导致无法新建环境或镜像,/usr被占满了导致根本无法做任何更新或配置重写。。。。于是,这一篇

Linux硬链接、软链接

硬链接是一个目录条目(在基于目录的文件系统中),它将一个名称与一个文件关联起来。因此,每个文件必须至少有一个硬链接。为文件创建额外的硬链接可以使该文件的内容可以通过额外的路径访问(即通过不同的名称或在不同的目录中)这会导致别名效应(aliaseffect):进程可以通过任意路径打开文件并修改其内容。相比之下,文件的软链

【Verilog教程】2.5编译指令

以反引号`开始的某些标识符是Verilog系统编译指令。编译指令为Verilog代码的撰写、编译、调试等提供了极大的便利。下面介绍下完整的8种编译指令,其中前4种使用频率较高。define,undef在编译阶段,`define用于文本替换,类似于C语言中的#define。一旦`define指令被编译,其在整个编译过程中

ChatGPT可以取代搜索引擎吗?

ChatGPT对于一些简单的问题,可以完美的完成任务。但是我让它写一篇完整的文章,看看它能否代替我进行写作地的时候,我确定它不能完全取代人类。但是我们可以使用更多的指导来让AI在日常工作流程为我们工作,所以本文将讨论如何有效利用ChatGPT。这个想法是从简单的日常用例开始,然后进入更复杂的阶段。最后让我们看看Chat

热文推荐