Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常

详解BigDecimal及其加减乘除运算 目录 一、BigDecimal概述 二、构造函数详解 1、BigDecimal(int val) 2、BigDecimal(intval, MathContextmc) 3、BigDecimal(longval) 4、BigDecimal(longval, MathContextmc) 5、BigDecimal(BigIntegerval) 6、BigDecima... 阅读详情

在这里插入图片描述

卖个小问题

八大基本数据类型:char byte double int long short boolean float
数值类型有:
4个整数型 byte int long short
2个浮点型 float double
剩余1个字符型 char
1个布尔型 boolean
其中数值类型面临着很大的问题:
我想要小数点后10位参与运算,假设科学家在计算的过程只能精确到小数点后2位,那可是要出大问题的
int取值范围是[-2147483648, 2147483647],也就十个亿的长度,姓马名云和姓马名化腾每天面临的资产数字恐怕是很多个int类型,像这样的情况Java的基本数据类型就无法解决问题了
但是! 金融行业很多软件都是用Java语言所建立的,面临这一问题如何计算呢
同时平时在使用double类型的时候很容易出现的如下的情况
在这里插入图片描述

所以说,double只能供于一些对数值比较不敏感的行业或者场景使用
为此Java提供了BigDecimal对象来解决这一问题,这个对象也叫做大小数

既然是对象类型了,两个数值之间的加减乘除就不仅仅是通过+ - * /来解决了,肯定是通过方法来实现了

BigDecimal的加减乘除用法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

除法时存在的精度/进位问题

 public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

BigDecimal divisor : 这个不必多问,就是你的除数
int scale : 这个是获取的数字想保留几位小数
int roundingMode : 这个是获取的数字保留小数后,对后一位小数选取的模式(四舍五入/进位/舍去),但是这个值最大只能是7
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第三个参数可选的选项 :

BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2
在这里插入图片描述
BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3
在这里插入图片描述

BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4
在这里插入图片描述

BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3
后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。
在这里插入图片描述

BigDecimal 的比较大小用法

在这里插入图片描述
输出结果如下:
在这里插入图片描述
BigDecimal注意事项
1.BigDecial对象本身的值是不可改变的,就像String一样,它的所有操作都会生成一个新的对象,所以说他的方法返回的是一个新的BigDecial对象而不是在它对象本身的值的基础上修改
这里看看源码
在这里插入图片描述
底层其实调用的就是一个静态的add方法,具体如下
在这里插入图片描述

  1. 不要用equals方法来比较BigDecimal对象,只能通过compareTo()和signum()方法
    在这里插入图片描述
    通过源码介绍我们知道scale是值的小数点后的长度而不是值本身

在这里插入图片描述

在这里插入图片描述

关于BigDecimal 的加减乘除计算 因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。四舍六入,五分两种情况。 阅读详情

相关推荐

HFSS实战:手把手教你设计微带发夹线滤波器(附完整参数计算流程)

本文详细介绍了使用HFSS设计微带发夹线滤波器的完整流程,包括参数计算、HFSS建模和优化策略。通过实战案例,帮助读者掌握微波滤波器设计的核心技巧,特别是奇偶模阻抗计算和HFSS仿真中的关键设置,适用于通信系统设计和射频工程应用。

weixin_29251567的博客 441

BigDecimal 使用compareTo比较大小

1.BigDecimal的比较模式 BigDecimal b1 = new BigDecimal(0.1); BigDecimal b2 = new BigDecimal(0.2); int c = b1.compareTo(b2); // -1 c=1表示b1大于b2 c=0表示b1等于b2 c=-1表示b1小于b2 2.BigDecimal的round模式 BigDecimal...

悟能的师兄的专栏 7万+

【AI绘图进阶指南】Latent Diffusion Model核心组件解析——从理论到实践

本文深入解析Latent Diffusion Model(LDM)的核心组件,包括Autoencoder、Denoiser和Conditioning Encoder的工作原理及实践应用。通过理论结合代码示例,揭示LDM如何高效处理图像生成任务,并优化AI绘图流程,为开发者提供从理论到实践的进阶指南。

weixin_42628941的博客 384

Guava

Guava下载地址:http://pan.baidu.com/s/1o8rQmds(百度云) http://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar(官网) 相关教程: 英文:http://www.tutorialspoint.com/guava/guava_...

aifeie2259的博客 669

京东技术产品经理面试全记录:从简历投递到一面45分钟实战复盘

本文深度复盘京东技术产品经理面试全流程,从策略准备、思维题拆解、项目阐述到反问谈判,提供了一套可演练的求职策略体系。文章强调该岗位需具备横跨技术与商业的枢纽能力,并通过“QQ分组vs微信标签”等案例,剖析了产品思维与结构化表达在面试中的关键作用,助力候选人将紧张转化为掌控感。

weixin_29275257的博客 629

实用工具抓取youtube热门数据

YouTube作为全球第二大搜索引擎,2024年日均视频播放量突破50亿次,头部创作者单月广告分成可达百万美元量级。但对数据分析者而言,其反爬机制堪称业界最严: ‌反爬技术升级‌:Google部署的Botguard系统可检测异常流量,触发机制包括: 单IP每小时请求超过50次即封禁 检测Headless浏览器指纹(如Chrome的navigator.webdriver属性) 动态加载内容(如评论数据需滚动页面3次后加载) ‌数据价值维度‌:某MCN机构研究显示,前100热门视频的标题关键词复用率高达67%

26万+

BigDecimal的(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP、ROUND_HALF_DOWN)方法使用

1、ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1。4、ROUND_HALF_DOWN:根据保留数字后一位>5进行四舍五入。3、ROUND_HALF_UP:根据保留数字后一位>=5进行四舍五入。2、ROUND_DOWN:保留设置数字,后面所有直接去除。BigDecimal的setScale四大常用方法总结。

BUG指挥课堂 4293

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

java BigDecimal.ROUND_UP和BigDecimal.ROUND_DOWN的用处

今天在工作中遇到了这样的一个需求, 一个小数,例如1.7777777,或者1.3333333,不管后面的位数是多少,只保留到小数点后第二位,但是不是四舍五入,1.7777777处理后就是1.77,1.3333333处理后就是1.33 这个就要用到BigDecimal#setScale的方法了。 具体看如下代码: ?View Code JAVA

2万+

《Android最全面试题-Offer直通车》目录

如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。

大模型大数据攻城狮的专栏 2860

LangGraph实战训练营-从零构建AI驱动的wiki知识库

本文深入解析 LangChain 团队开源的 Deep Agents 框架核心示例——LLM Wiki,一个基于大语言模型自动构建和维护持久化知识库的生产级 AI Agent 系统。文章从项目架构、环境搭建、核心原理到实战操作全面展开:详解 CompositeBackend 组合后端与细粒度权限控制的安全设计、四种工作模式(初始化/摄取/查询/质量检查)的完整流程、LangSmith 远程沙箱的隔离执行机制,以及人机协同审核(HITL)的实践应用。

program哲学 197

BigDecimal.ROUND_UP保留0为小数,向上取整

public static void main(String[] args) { int i = new BigDecimal(100).multiply(new BigDecimal(0.01)).multiply(new BigDecimal(2)).setScale(0, BigDecimal.ROUND_UP).intValue(); System.out.println(i); } 运行结果:3 double v = 100 * 0...

lazy_cat_go的博客 4727

JavaScript教程-字符集,Unicode转义序列,标识符,数据类型,数字,未定义值,浮点数,字符串,引用数据类型,类型检测,类型转换,运算符,关系运算符,

前端学习

VAN 212

BigDecimal ROUND_UP与ROUND_HALF_UP的区别

BigDecimal ROUND_UP与ROUND_HALF_UP的区别

qq_42232182的博客 3601

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数位 | 附上计算工具类

个人记录:最近用BigDecimal比较多,对精度要求高,记录一下 BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数 一、加减乘除 BigDecimal num1 = new BigDecimal(2); BigDecimal num2 = new BigDecimal(6); BigDecimal num3 = null; -- 加 2+6 num3 =...

慌途L 5万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

BigDecimal加减乘除计算

BigDecimal的运算——加减乘除 首先是bigdecimal的初始化 这里对比了两种形式,第一种直接value写数字的值,第二种用string来表示 我们对其进行加减乘除绝对值的运算,其实就是Bigdecimal的类的一些调用 BigDecimal num1 = new BigDecimal(0.005); BigDecimal num2 = new BigDecimal(1000000); BigDecimal num3 = new BigDecimal(-1000000); //尽

weixin_49562132的博客 7万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

bigdecimal加减乘除运算方法

divide()方法将当前BigDecimal对象除以divisor,并返回一个新的BigDecimal对象,表示它们的商。而BigDecimal可以避免这种情况的发生,因此在需要高精度计算的场合,使用BigDecimal是非常合适的。subtract()方法将subtrahend从当前BigDecimal对象中减去,并返回一个新的BigDecimal对象,表示它们的差。add()方法将augend与当前BigDecimal对象相加,并返回一个新的BigDecimal对象,表示它们的和。

showerin的博客 2万+

mysql 存储金额_java中存储金额

很早之前, 记得一次面试, 面试官问存储金钱用什么数据类型? 当时只知道8种数据类型(boolean, byte, short, int, long, float, double, char)的我, 回答了double, 因为我觉得double是双精度类型, 最适合, 但是面试官告诉我应该用BigDecimal! 最近在做支付的项目, 才对这种数据类型有了更多的了解.栗子请看题:示例1问, 结果是...

weixin_35744067的博客 1917

BigDecimal运算

Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提 供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。 构造器  描 述  BigDecima

我的秘密花园 1184

1--100之间的阶乘,初学者参考

方法一; public static void main(String[] args){ double sun=1; //注意数据类型的范围大小。 for(int i=1;i<=100;i++){ sun=sun*i; } System.err.println("1到100的阶乘是"+sun); } 方法二; public static void main...

PY71616的博客 1863

JAVA 实现四则运算(含小数)

一、程序要求 解析一般数学算式,实现简单的带括号的加减乘除运算。 二、基本思路 前面两篇介绍了直接解析字符串和用数组容器辅助解析的两种方式,这次再介绍最常用的解析算法——解析后缀表达式(逆波兰表达式)。 三、逆波兰表达式及其得到算法 1、逆波兰表达式 也即后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则)。(摘自百度),既然没了运算符的优先规则,那么计算机解析起来自然容易的多。 对于我们常...

fivehundredyearsago的博客 1384

BigDecimal类型加减乘除运算(Java必备知识)

在现实开发当中经常会遇到这种计算,这里特此整理一下为方便以后学习,希望能帮助到其他的萌新。 为什么要用BigDecimal计算? 因为 float, double等浮点的存储和操作(比如:相加,相减…)存在误差(7.22f - 7.0f = 0.21999979 而不是 0.22)。 浮点计算误差产生的原因 将十进制数转为二进制,在计算机运行中本就存在误差 来看一个例子:将十进制的0.2转化为二进制,按照乘二取整法 0.2 * 2 = 0.4 0 0.4 * 2 = 0.8 0 0.8 *

怪咖@的博客 4万+

BigDecimal计算(加减乘除)

BigDecimal加法,BigDecimal减法,BigDecimal乘法,BigDecimal除法,BigDecimal计算

nbzhaomao的博客 6万+

Java中BigDecimal的使用:加减乘除、四舍五入、比较大小、资金统计

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

pan_junbiao的博客 1万+

Java BigDecimal的基本使用方法

1、对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类 2、运算速度比一般的+、-、*、/要快 3、基本方 法描 述  add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。  subtract(BigDecima

qdgengwenfei的专栏 9852
上一篇: Springboot项目中,常用几种加密算法之一解析--详解BCrypt加密算法,图文详解不怕你学不会
下一篇: 在各类数据库中随机查询n条数据
瓦坎达forever
博客等级 码龄7年 143粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值