BigDecimal中除法divide()方法的详细解析,带你走进源码的world

前端埋点的实践 1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段 阅读详情

进入方法源码之前,按照惯例,了解一下方法都需要知道哪些常量

//设置一个常量=0,判断用
public final static int ROUND_UP =           0;
//设置一个常量=7,判断用
public final static int ROUND_UNNECESSARY =  7;
//整型数字表示的BigDecimal,例a的intCompact值为122
private final transient long intCompact;
//Long类型的最小长度
static final long INFLATED = Long.MIN_VALUE;
//方法的第二个参数,指小数位位数
private final int scale;

以下是divde方法的方法体
在这里插入图片描述

 public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) {
 		//如果第三个参数传过来的值小于0或者大于7,抛出异常"Invalid rounding mode"
        if (roundingMode < ROUND_UP || roundingMode > ROUND_UNNECESSARY)
            throw new IllegalArgumentException("Invalid rounding mode");
        //只要被除数不等于Long类型的最小值
        if (this.intCompact != INFLATED) {
        	//除数的值不等于Long类型最小值
            if ((divisor.intCompact != INFLATED)) {
            	//进入divide的方法
                return divide(this.intCompact, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
            } else {
            //除数的值等于Long类型最小值
                return divide(this.intCompact, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
            }
        } else {//被除数等于Long类型的最小值
        	//除数的值不等于Long类型最小值
            if ((divisor.intCompact != INFLATED)) {
                return divide(this.intVal, this.scale, divisor.intCompact, divisor.scale, scale, roundingMode);
            } else {//除数的值等于Long类型最小值
                return divide(this.intVal, this.scale, divisor.intVal, divisor.scale, scale, roundingMode);
            }
        }
    }

根据以上情况,势必会出现四种方法
被除数是long类型 除数是BigDecimal类型的
被除数是BigDecimal类型 除数是long类型的
被除数是long类型 除数是long类型的
被除数是BigDecimal类型 除数是BigDecimal类型的

总结

    (1)数字敏感计算使用BigDecimal。
    (2)尽量使用参数类型为String的构造函数。
    (3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。
[Python] 为什么你的脚本明明没报错,却什么也没发生? Python脚本运行后没报错却没结果?这是许多开发者遇到的棘手问题。文章分析了六种常见原因:代码未进入目标逻辑分支、输出路径错误、中间数据为空、异常被吞掉、异步操作未完成、运行了错误脚本版本。建议通过"过程可视化"排查,如打印关键变量、检查工作目录、验证数据状态等。职场中更应关注结果验证而非单纯代码执行,确保脚本真正解决问题。建立结果验证意识是从"会写代码"到"稳定交付"的关键转变。 阅读详情

相关推荐

麒麟操作系统安装达梦数据库ARM版

Linux安装达梦数据库ARM版

运维@小兵的博客 8768

BigDecimal中divide方法详解

在Java中,BigDecimal类提供了精确的十进制浮点运算,而其中的divide方法用于执行除法运算。相比于普通的浮点数运算,BigDecimal的divide方法能够有效避免浮点数运算带来的精度损失问题,确保精确的计算结果。通过本文,我们深入了解了Java中BigDecimal的divide方法,了解了其基本用法、舍入模式以及实际应用场景。希望这些知识能够帮助你更好地处理精确计算的场景。

技术研究中心 1万+

关于WPF PasswordBox 增加提示文案,请输入密码,亲测最快方案,改最少的代码!!!

关于WPF PasswordBox 增加提示文案,请输入密码,亲测最快方案,不需要像其他方案改任何PasswordBox的样式,直接加个texbox控件显示隐藏即可1.xaml,注意关键代码,样式之类可以不管 2.xaml.cs

鸣的博客 1542

bigdecimal的常规用法

在java项目中一般来bigdecimal来进行 精度较高的金钱 运算 ,以及浮点数的运算。 Bigdecimal a =new Bigdecimal(1); Bigdecimal b =new Bigdecimal(1); 加法 a.add(b) 减法 a.subtract(b) 乘法 a.multiply(b) 除法 a.divide(b) 在运用中可以进行小数点的格式化 运算。 BigD...

weixin_43889681的博客 1183

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 471

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3216

Java中BigDecimal类的常见用法及针对divide()方法的多种处理模式

一般的float和double类型数据可以用作科学计算和工程计算,但是由于在商业计算中,对数据精度的要求较高,所以在开发过程中会用java.math.BigDecimal类。因为BigDecimal类支持任意精度的定点数,可以用它来精确计算货币值。

m0_54701273的博客 3150

会计引擎:交易与核算分离的前世今生

一、为什么需要会计引擎 金融产品的设计,一如一块硬币需要兼顾两面:一面是为客户提供好的金融服务,满足客户支付结算、借贷、资产保值增值等方面的需求,并在这个过程中,以数字化的方式做好客户资产的登记,登记的载体,则是“分户”或“台账”,如客户存款户,是一种典型的分户--资金的增减变化都在一个账户中进行体现,而客户购买的银行理财,因为收益率、期限、投资标的不同,每一笔持有就形成一行记录,即为“台账”--这当然是不严谨但相对形象的表述。但是,“分户”和“台账”并没有必然的区别,以贷款为例,一些银行仍然存在所谓“

银行信息系统应用架构详解 983

JAVA 常用API学习笔记

本文总结了Java API学习笔记中的基础概念和常用工具类,主要包括以下内容: 基础概念:API即JDK提供的所有类和接口,可分为工具类、字符串相关、包装类&大数&根父类、时间API四大模块。 工具类: Math类:提供数学运算方法如绝对值、取整、幂运算、随机数生成等 System类:包含系统相关方法如exit终止虚拟机、currentTimeMillis获取时间戳、arraycopy数组复制 Objects类:提供对象操作如equals安全比较、isNull/nonNull判空 Runtime类:表示Ja

m0_75052952的博客 241

【软考】高项论文写作常见模板

本文主要介绍了YYYY年MM月DD日,我所在公司承接了XXXX项目的建设过程,包括了XXX,XXX,XXX内容,涉及到XXX,XXX,XXX技术。本人在项目中承载着项目经理的角色,主要负责了XXX,XXX,XXX方面事宜。此项目时间紧,任务重,实施过程中,我们特别注重了1、XXX 2、XXX 3、XXX几个方面,经过团队的一致努力,本项目按时交付,运行至今,客户反馈良好。但是在实施过程中,也曝露除了一些问题,包括了XXX,XXX等,通过应急处理和协调,这些问题都得到了妥善解决,没有影响到项目进度。

奶爸的编程之路,也就一周冷个三天 1686

Nerf 训练自有数据

colmap相机位姿转为LLFF格式数据

zfjBIT的专栏 2309

JavaSE『学习笔记』

本教程以 JDK8 为主,新版本与新特性以介绍与使用为辅。

小哞^同^学的技术博客 1236

Maestro 薛定谔软件简单分子对接案例

#参考:Maestro 薛定谔软件使用:Maestro 薛定谔对接:sid=287811。

weixin_42357472的博客 1万+

java基础知识

java基础知识

xgq_111的博客 2231

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Go / C / Python / Java 四语言对照学习总览

按统一维度横向对比四门语言的核心知识点,便于交叉记忆与迁移学习。

2401_83227843的博客 950

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BigDecimal中divide算法

BigDecimal a=new BigDecimal(“2322.47”); BigDecimal b=stream.divide(new BigDecimal(209),2).setScale(4,BigDecimal.ROUND_HALF_UP); System.out.println(b); 输出是11.12 是错误的 查看 divide源码 public BigDecimal divi...

weixin_43758193的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

bigdecimal除法不四舍五入_bigdecimal.divide除法运算用法详解与注意事项

一、bigdecimal精度计算类介绍bigdecimal是java api中提供的一个用于精度计算的一个类,很多情况下,我们的Java项目中在做购买支付或者是价格计算时由于JavaSE中提供的四类八种数据类型或多或少的都会有精度损失,在对金钱计算方面极不安全,因此绝大多数情况下会用到bigdecimal类做精度方面的计算,从而保证数据或者是数字的绝对精确与安全。今天的主角就是divide方法,该...

weixin_39593519的博客 5436

BigDecimal 中 divide()方法概述

例如,在财务计算中通常使用ROUND_HALF_UP,而在科学研究中可能需要更高的精度。在日常应用中,BigDecimal.divide方法可以用于处理简单的数值运算。(第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。roundingMode:舍入模式,用于指定如何处理无法精确表示的小数位。ROUND_UNNECESSARY:断言结果必须是精确的。ROUND_HALF_EVEN:银行家舍入法。ROUND_DOWN:向靠近零的方向舍入。ROUND_UP:向远离零的方向舍入。

L95951216的博客 771

Bigdecimal.divide()方法使用注意事项

1.工作记录 BigDecimal fee = new BigDecimal("0.1"); BigDecimal doubleParamFee = new BigDecimal(0.1); BigDecimal rate = new BigDecimal("1.05"); BigDecimal div = fee.divide(rate,RoundingMode.DOWN); BigDecimal vat = fee.su

编程是一门艺术 9617

BigDecimal 除法 divide方法参数,各参数作用,详细~

BigDecimal 多参自定义除法 public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) public static void main(String[] args){ BigDecimal b1 = new BigDecimal(10.005); BigDecimal b2 = new BigDecimal(2); //参数1 为除数 //

了迹奇有没 1万+

bigdecimal divide四舍五入_BigDecimal 四则运算

先介绍下BigDecimal: 属于 java.math.BigDecimal;在我们写代码过程中有时会遇到较大数字之间的计算问题,比如金额的计算,这个时候使用浮点类型进行计算可能就不那么准确了,会损失一定的精准度.如果要用BigDecimal 进行数学运算,不能使用+ , - ,* , /等传统运算符,而要调用其对应的方法;很多知识是自己操作了一遍才了解,虽然不是很难的知识点.例如BigDeci...

weixin_29279101的博客 4895

Bigdecimal 除法用法

在开发中遇到了一个Bigdecimal的问题,在此记录一下。指定其保留位数。见修改代码。代码中使用了 BigDecimal 做精确计算,在做除法时,系统抛出 “ Non-terminating decimal expansion;因为BigDecimal 是不可变的、任意精度的有符号十进制数,所以可以做精确计算。但在除法中,准确的商可能是一个无限长的十进制扩展;例如,1 除以 3 所得的商。

tszc95的博客 2300

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

bigdecimal divide用法_好程序员Java培训分享BigDecimal的用法

  好程序员Java培训分享BigDecimal的用法,如果对数值结果精度要求很高,那么就可以使用BigDecimal,BigDecimal可以精准的控制小数点后面的数字Java培训  1. 实例 BigDecimal 对象  通常会使用 String 和 int 构造方法实例出 BigDecimal 对象,即  new BigDecimal(String val);  new BigDecima...

weixin_39836536的博客 1603

Java开发技巧

java开发技巧总结

qq_21370419的博客 1311

BigDecimal 简介,常用方法

BigDecimal 常用方法简介

光年的博客 1142
上一篇: SpringBoot内置提供的定时器详解教程,图文详解含代码
下一篇: 数据存储分区--范围分区,哈希分区,列表分区,性能调优必不可缺少的部分
瓦坎达forever
博客等级 码龄7年 143粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值