java中BigDecimal的介绍及使用(二)
系列文章目录
- java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题
- java中BigDecimal的介绍及使用(二)
文章目录
- 系列文章目录
- 一、前言
- 二、BigDecimal提供的方法
- 2.1、stripTrailingZeros() 去除小数尾部所有的0
- 2.2、int signum()
- 2.3、int scale()
- 2.4、intValue()
- 2.5、intValueExact()
- 2.6、unscaledValue()
- 2.7、remainder(BigDecimal divisor)
- 2.8、divideAndRemainder(BigDecimal divisor)
- 三、进阶
- 3.1、获取BigDecimal整数部分、小数部分、整数位数、小数位数
一、前言
在上一篇文章 《java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题 》 中主要介绍了BigDecimal的加减乘除运算及格式化方面的使用,本篇主要介绍其他相关的内容。
二、BigDecimal提供的方法
加减乘除等常用的方法在上一篇中已经提过,本篇不再重复写,主要讲一下其他可能用到的方法
| 方法 | 含义 |
|---|---|
| BigDecimal stripTrailingZeros() | 去除小数尾部所有的0,并返回一个BigDecimal类型的数据,不能保证不是科学计数法 |
| int signum() | 返回BigDecimal的正负号, 1:正数 0:零 -1:负数 |
| int scale() | 该方法返回此BigDecimal的小数位数。对于零或正值,小数位数是小数点右边的位数。对于负值,数字的未标度值乘以十,即标度取反的幂。 |
| int intValue() | 返回int数值,小数点后面的数值直接省略 |
| int intValueExact() | 返回int数值,小数点后面的数值直接省略,若BigDecimal对象的值超出int类型取值范围,抛出异常 |
| BigInteger toBigInteger() | 返回BigInteger数值,BigInteger理论上是负无穷到正无穷之间 |
| BigInteger unscaledValue() | 此方法返回一个BigInteger,其值是此BigDecimal值的未缩放值。 |
| divide(BigDecimal) | BigDecimal对象中的值相除,返回BigDecimal对象。该方法可能会遇到无限精度问题,会抛出异常,使用时需注意。详细见上一篇文章的无限精度的坑 |
| BigDecimal remainder(BigDecimal divisor) | 返回当前BigDecimal对象除以divisor后的余数。 被除数divisor不能是0否则抛出异常 |
| BigDecimal[] divideAndRemainder(BigDecimal divisor) | 返回当前BigDecimal对象除以divisor后的商和余数,以数组形式返回。被除数divisor不能是0否则抛出异常 |
int、BigInteger、long取值范围
| 类型 | 取值范围 |
|---|---|
| int | -2,147,483,648 到 2,147,483,647 |
| long | -9223372036854775808~9223372036854775807 |
BigInteger 任意大的整数,其取值范围在负无穷到正无穷之间,原则上是,只要你的计算机的内存足够大,可以有无限位的, 当数值超过long之后就要用BigInteger进行处理了
2.1、stripTrailingZeros() 去除小数尾部所有的0
BigDecimal stripTrailingZeros()
去除小数尾部所有的0,并返回一个BigDecimal类型的数据,不能保证不是科学计数法
0.20—>0.2
10.00—>10
100—>100
public static void main(String[] args) {BigDecimal a= new BigDecimal("10.000");BigDecimal b = new BigDecimal("100000");BigDecimal c = new BigDecimal("10.10");System.out.println(a.stripTrailingZeros().toPlainString());//10System.out.println(b); //100000System.out.println(b.stripTrailingZeros()); //1E+5 注意:返回的值可能已经是个科学计数法了System.out.println(c.stripTrailingZeros().toPlainString());//10.1
}
当stripTrailingZeros()返回科学计数法时,可以通过toPlainString()方法,不使用科学计数法进行输出。
2.2、int signum()
int signum() 返回BigDecimal的正负号,
1:正数 0:零 -1:负数用于判断BigDecimal对象是正数,负数,还是零
public static void main(String[] args) {BigDecimal a= new BigDecimal("10");BigDecimal b = new BigDecimal("-5");BigDecimal c = new BigDecimal("0");System.out.println(a.signum());//1System.out.println(b.signum());//-1System.out.println(c.signum());//0
}
2.3、int scale()
int scale() 该方法返回此BigDecimal的小数位数。
- 对于零或正值,小数位数是小数点右边的位数。
- 对于负值,数字的未标度值乘以十,即标度取反的幂。 注意:当BigDecimal的对象为科学计数法时,scale的值不一定等于小数位数
public static void main(String[] args) {BigDecimal a= new BigDecimal("10.00");BigDecimal b = new BigDecimal("-5.1");BigDecimal c = new BigDecimal("-174");BigDecimal d = new BigDecimal("-1234500");System.out.println(a.scale());//2System.out.println(b.scale());//1System.out.println(c.scale());//0System.out.println(d+"====="+d.scale());//-1234500=====0System.out.println(d.stripTrailingZeros()+"====="+d.stripTrailingZeros().scale());//-1.2345E+6===== -2 注意:当BigDecimal的对象为科学计数法时,scale的值不一定等于小数位数
}
2.4、intValue()
int intValue() 返回int数值,小数点后面的数值直接省略
注意
- int类型的取值范围是-2,147,483,648 到 2,147,483,647所以当超过这个数值时会从负值开始继续转换
- 可以使用intValueExact()方法,当超出int取值范围后会抛异常
public static void main(String[] args) {BigDecimal a= new BigDecimal("2999999999.99");BigDecimal b = new BigDecimal("2147483649");System.out.println(a.intValue());//-1294967297System.out.println(b.intValue());//-2147483647
}
2.5、intValueExact()
int intValueExact() 返回int数值,小数点后面的数值直接省略,若BigDecimal对象的值超出int类型取值范围,抛出异常
int取值范围是-2,147,483,648 到 2,147,483,647,当超过这个范围时抛出异常
以下示例可以看出intValue() 与intValueExact() 的区别
public static void main(String[] args) {BigDecimal a= new BigDecimal("2147483648");BigDecimal b = new BigDecimal("2147483648");System.out.println(a.intValue());//-2147483648System.out.println(b.intValueExact());//抛异常
}
执行结果:
-2147483648
Exception in thread "main" java.lang.ArithmeticException: Overflowat java.math.BigDecimal.intValueExact(BigDecimal.java:3152)at com.ruoyi.common.utils.money.Test1.main(Test1.java:12)
2.6、unscaledValue()
BigInteger unscaledValue() 此方法返回一个BigInteger,其值是此BigDecimal值的未缩放值。
总结一下就是返回没有小数点的金额,该值计算(此* 10this.scale())。如10.235–>10235 0.32—>32
public static void main(String[] args) {BigDecimal a = new BigDecimal("10.235");BigDecimal b = new BigDecimal("0.32");System.out.println(a.unscaledValue());//10235System.out.println(b.unscaledValue());//32
}
2.7、remainder(BigDecimal divisor)
BigDecimal remainder(BigDecimal divisor) | 返回当前BigDecimal对象除以divisor后的余数。
被除数divisor不能是0否则抛出异常
public static void main(String[] args) {BigDecimal a = new BigDecimal("10");System.out.println(a.remainder(new BigDecimal("2")));// 10%2 = 0a= new BigDecimal("10.23");System.out.println(a.remainder(new BigDecimal("2")));//10.23%2 = 0.23System.out.println(a.remainder(new BigDecimal("0")));//被除数不能是0,否则抛出异常
}
执行结果如下:

2.8、divideAndRemainder(BigDecimal divisor)
BigDecimal[] divideAndRemainder(BigDecimal divisor) 返回当前BigDecimal对象除以divisor后的商和余数,以数组形式返回。
被除数divisor不能是0否则抛出异常
注意:返回的数值会有小数点位数的问题
10.00 ➗ 2 = 5.00
10.00 ➗ 2.000 = 5
public static void main(String[] args) {BigDecimal a = new BigDecimal("10");BigDecimal[] arr = a.divideAndRemainder(new BigDecimal("2"));System.out.println(Arrays.asList(arr));//[5, 0]a= new BigDecimal("10.23");arr = a.divideAndRemainder(new BigDecimal("2"));System.out.println(Arrays.asList(arr));//[5.00, 0.23]a= new BigDecimal("10.23");arr = a.divideAndRemainder(new BigDecimal("2.000"));System.out.println(Arrays.asList(arr));//[5, 0.230]System.out.println(a.divideAndRemainder(new BigDecimal("0")));//被除数不能是0,否则抛出异常
}

三、进阶
3.1、获取BigDecimal整数部分、小数部分、整数位数、小数位数
方式一:
个人觉得用这种方式获取BigDecimal整数部分、小数部分、整数位数、小数位数比较方便
public static void main(String[] args) {BigDecimal a = new BigDecimal("10.23");String money = a.toPlainString();String integer = String.valueOf(a.toBigInteger());//整数部分String point = money.split("\\.").length==1?"":money.split("\\.")[1]; //小数部分System.out.println(integer);//10System.out.println(point);//23
}
相关文章:
java中BigDecimal的介绍及使用(二)
系列文章目录 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…...
NX二次开发UF_MTX3_identity 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX3_identity Defined in: uf_mtx.h void UF_MTX3_identity(double identity_mtx [ 9 ] ) overview 概述 Returns a 3 x 3 identity matrix. 返回一个3 x 3的单位矩阵。 UFUN…...
解决Hadoop DataNode ‘Incompatible clusterIDs‘报错
问题 启动hadoop时报错Failed to add storage directory 2023-11-26 12:02:06,840 WARN common.Storage: Failed to add storage directory [DISK]file:xxx java.io.IOException: Incompatible clusterIDs in xxx/dfs/data: namenode clusterID CID-xxxxxx; datanode cluste…...
计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(系统概述与环境搭建)
计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(系统概述与环境搭建) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单…...
神器!使用 patchworklib 库进行多图排版真棒啊
如果想把多个图合并放在一个图里,如图,该如何实现 好在R语言 和 Python 都有对应的解决方案, 分别是patchwork包和patchworklib库。 推介1 我们打造了《100个超强算法模型》,特点:从0到1轻松学习,原理、…...
MySQL -DDL 及表类型
DDL 创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification:[DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1.CHARACTER SET:…...
主从同步机制
RocketMQ的Broker分为Master和Slave两个角色,为了保证高可用性,Master角色的机器接收到消息后,要把内容同步到Slave机器上,这样一旦Master宕机,Slave机器依然可以提供服务。下面分析Master和Slave角色机器间同步功能实…...
Leetcode算法系列| 3. 无重复字符的最长子串
目录 1.题目2.题解C# 解法一:滑动窗口算法C# 解法二:索引寻找Java 解法一:滑动窗口算法Java 解法二:遍历字符串 1.题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例1: 输入: s "ab…...
Spring Cache(缓存框架)
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...
android开发:安卓13Wifi和热点查看与设置功能
近日对安卓热点功能做了一些技术验证,目的是想利用手机开热点给设备做初始化,用的是安卓13,简言之: 热点设置功能不可用,不可设置SSID和密码,不可程序控制开启关闭,网上的代码统统都过时了Loca…...
Java中的mysql——面试题+答案——第24期
当涉及MySQL时,面试题可以涵盖更多高级主题、安全性和实践经验。 MySQL中的存储引擎InnoDB和MyISAM的区别是什么? 答案: InnoDB支持事务,而MyISAM不支持。InnoDB使用行级锁,而MyISAM使用表级锁。InnoDB支持外键&#x…...
王者小游戏
游戏里的经验动物 Bear package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\辛欣\\OneDrive\\桌面\\王者荣耀图片(1)\\王者荣耀图片\\beast\\bear.jp…...
using meta-SQL 使用元SQL
%DatePart Syntax %DatePart(DTTM_Column) Description The %DatePart meta-SQL variable returns the date portion of the specified DateTime column. DatePart meta-SQL变量返回指定的DateTime列的日期部分。 Note: This meta-SQL variable is not implemented for COBOL. …...
函数式接口
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 咱们今天讨论下函数式接…...
使用shell快速查看电脑曾经连接过的WiFi密码
此方法只能查看以前连接过的wifi名称和对应的密码 查看连接过的WiFi名称netsh wlan show profiles查看具体的WiFi名称netsh wlan show profile name"你的wifi名称" keyclear...
通过亚马逊云科技云存储服务探索云原生应用的威力
文章作者:Libai 欢迎来到我们关于“使用亚马逊云科技云存储服务构建云原生应用”的文章的第一部分。在本文中,我们将深入探讨云原生应用的世界,并探索亚马逊云科技云存储服务在构建和扩展这些应用中的关键作用。 亚马逊云科技开发者社区为开发…...
Boot工程快速启动【Linux】
Boot工程快速启动【Linux】 在idea中打包cd usr/在local文件夹下mkdir app进入app文件夹把打包好的文件(只上传其中的jar)上传到app文件下检查linux中的Java版本,保证和项目的Java 版本保持一致运行 java -jar sp补全***.jar想看效果得查询当…...
三 STM32F4使用Sys_Tick 实现微秒定时器和延时
更多细节参考这篇 1. 什么是时钟以及作用 1.1 什么是时钟 时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏 1.2 时钟对于STM32的作用 指令同步:cpu和内核外设使用时钟信号来进行指令同步数据传输控制: 时钟信号控制数据在内部总…...
唯创知音WT2003H系列MP3录音语音芯片:高精度ADC与DAC,强大IO驱动能力成就音频卓越
在音频领域里,高精度和强大的驱动能力一直是工程师们追求的目标。唯创知音的WT2003H系列MP3录音芯片恰好满足了这一需求,该芯片具备16 bit高精度的ADC及DAC功能,大功率的IO驱动能力,能够直接驱动64mA,为电子产品带来卓…...
记录Windows下安装redis的过程
开源博客项目Blog支持使用EasyCaching组件操作redis等缓存数据库,在继续学习开源博客项目Blog之前,准备先学习redis和EasyCaching组件的基本用法,本文记录在Windows下安装redis的过程。 虽然redis官网文档写着支持Linux、macOS、Windows等…...
抖音热榜API实战:从签名生成到数据获取的完整Java指南
1. 抖音热榜API接入前的准备工作 第一次接触抖音热榜API时,我踩过不少坑。最头疼的就是签名生成那部分,明明照着文档做却总是报错。后来才发现是参数顺序搞错了。为了避免大家走弯路,我把完整的接入流程梳理出来。 首先需要注册开发者账号。打…...
云原生安全最佳实践:构建安全的云原生系统
云原生安全最佳实践:构建安全的云原生系统 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知云原生安全在现代企业中的重要性。随着云技术的快速发展,传统的安全方法已经难以满足云原生环境的需求。今天,我就来聊聊云原生…...
终极指南:如何高效使用Audio Slicer实现智能音频分割
终极指南:如何高效使用Audio Slicer实现智能音频分割 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 你是否曾为处理长音频文件而烦恼&…...
告别繁琐安装!在线PPT制作神器PPTist,浏览器就能创作专业演示文稿
告别繁琐安装!在线PPT制作神器PPTist,浏览器就能创作专业演示文稿 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS P…...
C++一维数组完全指南
一、什么是一维数组?用来一次性存储多个相同类型的数据内存中连续存放有统一的名字,用 ** 下标(索引)** 区分每个元素下标从 0 开始(非常重要)二、定义与初始化(四种常用方式)// 1. …...
避坑指南:ESP32用摇杆控制舵机,为什么你的舵机会抖?
ESP32摇杆控制舵机抖动问题全解析:从硬件设计到代码优化的完整避坑指南 当你兴奋地组装好ESP32、摇杆和舵机,准备实现酷炫的机械控制时,却发现舵机像得了帕金森一样不停抖动——这种挫败感我太熟悉了。经过数十个项目的实战积累,我…...
若依ruoyi框架单点登录实战:从零到一接入统一认证系统
1. 业务场景与需求分析 在企业级应用开发中,多系统间的身份认证一直是痛点。想象一下,员工每天要在OA、CRM、ERP等不同系统间反复登录,既影响效率又增加密码管理负担。这就是统一认证系统(单点登录)要解决的核心问题—…...
使用Alpine配置WSL ssh门户追
1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...
三步解锁纯净文档:告别百度文库的付费与广告困扰
三步解锁纯净文档:告别百度文库的付费与广告困扰 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 你是否曾在百度文库上找到了完美的参考资料,却被付费提示、广告弹窗和复杂…...
FastVideo 未来展望:下一代视频生成技术路线图分析
FastVideo 未来展望:下一代视频生成技术路线图分析 【免费下载链接】FastVideo A unified inference and post-training framework for accelerated video generation. 项目地址: https://gitcode.com/gh_mirrors/fa/FastVideo FastVideo 作为统一的视频生成…...
