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

news2025/2/24 2:10:21

系列文章目录

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

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


文章目录

  • 系列文章目录
  • 前言
  • 一、BigDecimal介绍
  • 二、加减乘除操作调用的方法
    • 2.1 加法 add()
    • 2.2 减法subtract()
    • 2.3 乘法multiply()
    • 2.4 除法divide()
  • 三、 其它操作
    • 3.1 绝对值abs()
    • 3.2 比较大小compareTo()
  • 总结


前言

  在实际开发时前端传值给到后端是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有了一定的理解与认识吧!如遇到什么问题可以在评论区交流,我们一起学习进步哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1027948.html

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

相关文章

rv1126-rv1109-驱动方法

1.简单写一下, 在根目录下修改指定编译 指定uboot 指定kernel的config 指定DTS

防静电离子风扇的应用及优点

防静电静电离子风扇是一种用于消除静电的设备,它可以通过离子化原理将静电荷离子化,从而达到静电的效果。防静电静电离子风扇通常采用离子风扇的形式,通过离子化原理将静电荷离子化,从而消除静电。 防静电静电离子风扇的工作原理…

Redis 持久化之 RDB 与 AOF 详解

Redis 持久化 我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会因为宕机而丢失。Redis 为我们提供了两种持久化方案,一种是基于快照,另外一种是基于…

数据结构与算法:排序算法(1)

目录 冒泡排序 思想 代码实现 优化 鸡尾酒排序 优缺点 适用场景 快速排序 介绍 流程 基准元素选择 元素交换 1.双边循环法 使用流程 代码实现 2.单边循环法 使用流程 代码实现 3.非递归实现 排序在生活中无处不在,看似简单,背后却隐藏…

vue 多环境文件配置(开发,测试,生产)

1.经常我们在开发时候会有不同环境,要代理的路由等等都会出现不同 配置一下三个文件打包的时候,执行三个不同的指令就会打包不同的环境 npm run build:dev npm run build:test npm run build:prodpackage.json 中配置scripts 指令 以,env.development…

Qt DoubleSlider双滑块支持float变化的控件,以及单滑块float控件

Qt DoubleSlider 双滑块支持float变化的控件,以及单滑块float控件 - 一杯清酒邀明月 - 博客园 (cnblogs.com)https://www.cnblogs.com/ybqjymy/p/13813001.html参考别人的分享,双滑块 看一下效果:

【力扣每日一题】2023.9.21 收集树中金币

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一棵树,不过这棵树不是普通的树,而是无向无根树。给我们一个二维数组表示节点之间的连接关系&#xff…

Canal 实现MySQL与Elasticsearch7数据同步

1 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump协议 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) canal 解析 binary log 对象(原始为 byte 流) 优点&…

OmniPlan Pro 4.6(Mac项目流程管理工具)

OmniPlan Pro 是 The Omni Group 为 macOS 和 iOS 操作系统开发的项目管理软件。它允许用户创建和管理复杂的项目、定义任务、分配资源、跟踪进度和生成报告。OmniPlan Pro 包括甘特图、网络图、关键路径分析、资源均衡和成本跟踪等功能。 借助 OmniPlan Pro,用户可…

在月球上看地球和太阳是怎么转的?

文章目录 参数初始化运动模型绝对坐标系以太阳和地球为中心以月球为坐标原点 参数初始化 众所周知,地球围绕太阳转,月球围绕地球转。但在地球上看,月亮和太阳都绕着地球转,那么如果我们是土生土长的月球人,我们看到的…

记-数据库事务隔离级别

记-数据库事务隔离级别 一、MySQL数据库默认隔离级别二、JDBC连接的事务隔离级别1. 查看JDBC连接的事务隔离级别2. JDBC连接的事务隔离级别设置过程 三、修改JDBC连接的事务隔离级别1. 全局修改2. 局部修改 一、MySQL数据库默认隔离级别 MySQL数据库默认事务隔离级别为REPEATAB…

微服务生态系统:使用Spring Cloud构建分布式系统

文章目录 什么是微服务?为什么选择Spring Cloud?Spring Cloud的关键组件示例:构建一个简单的微服务步骤1:创建Spring Boot项目步骤2:配置Eureka服务发现步骤3:创建REST控制器步骤4:运行项目步骤…

【R语言】完美解决devtools安装GitHub包失败的问题(以gwasglue为例)

Rstudio,R4.3.1,命令在Rstudio的命令行即console中运行。 文章目录 一、问题复述二、分析三、解决四、安装示例:gwasglue 一、问题复述 使用devtools安装一个github的包。 devtools: devtools 是 R 语言中一个非常有用的包&…

netty之数据读写源码阅读

数据读写 write 从client端的写开始看 client与服务端建立完connect后可以从future里拿到连接的channel对象。这里的channel是io.netty.channel.Channel对象。 调用其channel.writeAndFlush(msg);方法可以进行数据发送。 writeAndFlush会调用pipeline的writeAndFlush方法 …

目标检测算法改进系列之Neck添加渐近特征金字塔网络(AFPN模块)

渐近特征金字塔网络(AFPN模块) 在目标检测任务中,多尺度特征对具有尺度差异的目标进行编码具有重要意义。多尺度特征提取的常用策略是采用经典的自顶向下和自底向上的特征金字塔网络。 然而,这些方法存在特征信息丢失或退化的问…

【音视频】ffplay源码解析-FrameQueue队列

帧队列架构位置 结构体源码 FrameQueue结构体 /* 这是一个循环队列,windex是指其中的首元素,rindex是指其中的尾部元素. */ typedef struct FrameQueue {Frame queue[FRAME_QUEUE_SIZE]; // FRAME_QUEUE_SIZE 最大size, 数字太大时会占用大量的…

第二证券:什么是a股b股?

在我国的股市中,我们经常会听到“A股”和“B股”这两个名词。那么,终究什么是A股和B股呢? 首先,A股全称为“A股票”,是指在我国境内上市的以人民币计价的股票。A股首要面向国内出资者,只要具有必定条件的内…

如何快速检测代理IP质量?方法与工具全干货

一直以来,IP代理都是出海跨境业务的刚需。质量好的IP代理,除了在跨境业务产生巨大作用,在SEO监控、爬虫抓取、市场研究等领域也发挥着很大的作用。但是,对于IP代理的质量检测是我们选择高标准IP代理的一句,我们一般都会…

美国零售电商平台Target,值得入驻吗?如何入驻?

Target 是美国最大的零售商之一,在品牌出海为大势所趋的背景下,它在北美电商中的地位节节攀升。Target 商店在众多垂直领域提供各种价格实惠的自有品牌,吸引越来越多的跨境商家入驻,如美妆、家居、鞋服、日用百货等,随…

Mybatis学习笔记12 分页插件

Mybatis学习笔记11 缓存相关_biubiubiu0706的博客-CSDN博客 (5) select distinct top(<取数说明>) <选择 列表> (1) from <表1> <连接类型> join <表2> ON <连接条件> (2) where <筛选条件> (3) group by <分组条件> (4) havi…