BigDecimald简单使用

为什么要用BigDecimal运算

        在计算浮点型数据时,往往会存在数据计算失真问题

        例1

        2.0 - 1.9 应该等于0.1,用float类型赋值运算得出的结果为0.100000024,有问题

        

        例2

        1.8 - 1.9 应该等于 -0.1,用double类型赋值得出的结果为-0.09999999999999987,明显有问题

        

BigDecimal使用

        BigDecimal实现加法运算

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(2.0D);BigDecimal d2 = BigDecimal.valueOf(1.9D);//不设置舍入模式BigDecimal d = d1.add(d2);                                          //3.9//设置舍入模式,公共的模式,可去MathContext类查看更多BigDecimal dd = d1.add(d2, MathContext.DECIMAL32);                  //3.9//设置舍入模式,以new方式设置舍入模式BigDecimal ddd = d1.add(d2, new MathContext(5));         //3.9}

        BigDecimal实现减法运算

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(2.0D);BigDecimal d2 = BigDecimal.valueOf(1.9D);BigDecimal d = d1.subtract(d2);                                             //0.1BigDecimal dd = d1.subtract(d2, MathContext.DECIMAL32);                     //0.1BigDecimal ddd = d1.subtract(d2, new MathContext(5));            //0.1}

        BigDecimal实现乘法运算

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(2.0D);BigDecimal d2 = BigDecimal.valueOf(1.9111111111111111111111111111111111111111D);BigDecimal multiply0 = d1.multiply(d2);                                     //3.82222222222222240BigDecimal multiply1 = d1.multiply(d2, MathContext.UNLIMITED);              //3.82222222222222240BigDecimal multiply2 = d1.multiply(d2, MathContext.DECIMAL32);              //3.822222BigDecimal multiply3 = d1.multiply(d2, MathContext.DECIMAL64);              //3.822222222222222BigDecimal multiply4 = d1.multiply(d2, MathContext.DECIMAL128);             //3.82222222222222240BigDecimal multiply5 = d1.multiply(d2, new MathContext(2));      //3.8}

        BigDecimal实现除法运算

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(2.0D);BigDecimal d2 = BigDecimal.valueOf(1.00000000);//不设置舍入方式及小数位数BigDecimal divide0 = d1.divide(d2);                                           //2//以RoundingMode设置舍入方式BigDecimal divide1 = d1.divide(d2, RoundingMode.HALF_UP);                     //2.0//以MathContext设置舍入方式BigDecimal divide2 = d1.divide(d2,MathContext.UNLIMITED);                     //2//设置小数位数,舍入方式BigDecimal divide4 = d1.divide(d2,10, RoundingMode.HALF_UP);            //2.0000000000}

        BigDecimal求绝对值

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(-2.0123456789D);BigDecimal abs = d1.abs();                              //2.0123456789BigDecimal abs1 = d1.abs(MathContext.DECIMAL32);        //2.012346}

        BigDecimal 比较大小

                

    @org.junit.jupiter.api.Testpublic void aaa(){BigDecimal d1 = BigDecimal.valueOf(-2.0123456789D);BigDecimal d3 = BigDecimal.valueOf(-2.0123456789D);BigDecimal d2 = BigDecimal.valueOf(-3.0123456789D);//用compareTo比较两个BigDecimal的大小->0:等于;1:大于;-1:小于int i = d1.compareTo(d2);   //1int i2 = d2.compareTo(d1);  //-1int i3 = d3.compareTo(d1);  //0}

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

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

相关文章

用23种设计模式打造一个cocos creator的游戏框架----(十四)观察者模式

1、模式标准 模式名称:观察者模式 模式分类:行为型 模式意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 结构图: 适用于:…

网神 SecGate 3600 防火墙 多处任意文件上传漏洞复现

0x01 产品简介 网神SecGate 3600防火墙是基于状态检测包过滤和应用级代理的复合型硬件防火墙,是专门面向大中型企业、政府、军队、高校等用户开发的新一代专业防火墙设备,支持外部攻击防范、内网安全、网络访问权限控制、网络流量监控和带宽管理、动态路由、网页内容过滤、邮…

【Jeecg Boot 3 - 第二天】1.2、jar 包和 lib 依赖分离,部署包缩小100倍

一、场景 二、思路 三、实战 ▶ 2.1、项目 jar 包解压获取 lib config Stage 1:正常打包获取 jeecg-system-start-3.6.0.jar Stage 2:解压 获取如下文件 Stage 3:获取 lib config ▶ 2.2、获取简化版项目jar包 Stage 1&#xff1…

AI+无代码助力企业供应链优化

内容来自演讲:潘峰 | 预见明日科技(北京)有限公司 | CEO 摘要 本文介绍了企业供应链中的挑战和解决方案。文章指出,供应链成本占企业经营成本的大部分,且存在供给端和需求端的高度不确定性。为应对这种不确定性&…

【深度学习】注意力机制(二)

本文介绍一些注意力机制的实现,包括EA/MHSA/SK/DA/EPSA。 【深度学习】注意力机制(一) 【深度学习】注意力机制(三) 目录 一、EA(External Attention) 二、Multi Head Self Attention 三、…

ActiveMQ任意文件写入漏洞(CVE-2016-3088)

简述:ActiveMQ的fileserver支持写入文件(但是不支持解析jsp),同时也支持移动文件。所以我们只需要先上传到服务器,然后再移动到可以解析的地方即可造成任意文件写入漏洞。我们可以利用这个漏洞来上传webshell或者上传定时任务文件。 漏洞复现 启动环境 …

stm32 HAL库 发送接受 到了一定的字符串后就卡在.s文件中

问题介绍: 某个项目开发过程中,串口接收中断,开启了DMA数据传输,开启了DMA中断,开启DMA半满中断。然后程序运行的过程中,接收了一部分数据后就会卡在启动文件的DMA1_Ch4_7_DMA2_Ch3_5_IRQHandler 中断里。…

Etcd实战(二)-k8s集群中Etcd数据存储

1 介绍 k8s中所有对象的manifest都需要保存到某个地方,这样他们的manifest在api server重启和失败的时候才不会丢失,因此引入了etcd。在k8s中只有api server和etcd直接交互,其它组件都通过api server间接和etcd交互,这样做的好处…

Flink反压如何查看和优化

我们在使用Flink程序进行流式数据处理时,由于种种原因难免会遇到性能问题,如我们在使用Flink程序消费kafka数据,可能会遇到kafka数据有堆积的情况,并且随着时间的推移,数据堆积越来越多,这就表名消费处理数…

机器学习---Boosting

1. Boosting算法 Boosting思想源于三个臭皮匠,胜过诸葛亮。找到许多粗略的经验法则比找到一个单一的、高度预 测的规则要容易得多,也更有效。 预测明天是晴是雨?传统观念:依赖于专家系统(A perfect Expert) 以“人无…

云基础软件深化合作,云轴科技ZStack与麒麟软件战略签约

12月8日,云轴科技ZStack与麒麟软件战略合作签约仪式在北京举行,双方对过往紧密合作表达了充分肯定,并就进一步联合技术创新、打造重点行业标杆和持续赋能客户达成高度共识。云轴科技创始人&CEO张鑫和麒麟软件高级副总经理谢文征共同见证双…

Oracle(2-17) RMAN Maintenance

文章目录 一、基础知识1、Retention Policy 保留政策2、Recovery Window - Part 1 恢复窗口-第1部分3、Cross Checking 交叉检查4、The CROSSCHECK Command CROSSCHECK命令5、OBSOLETE VS EXPIRED 过时与过期6、Deleting Backups and Copies 删除备份和副本7、The DELETE Comma…

无参RCE [GXYCTF2019]禁止套娃1

打开题目 毫无思绪,先用御剑扫描一下 只能扫出index.php 我们尝试能不能用php伪协议读取flag php://filter/readconvert.base64-encode/resourceindex.php php://filter/readconvert.base64-encode/resourceflag.php 但是页面都回显了429 怀疑是不是源码泄露 用…

【Linux学习】深入理解动态库与静态库

目录 十三.动态库与静态库 13.1 认识动静态库 13.2 深入理解动静态库 什么是库? 编译链接过程 动静态库的基本原理 13.3 静态库 静态库的打包: 静态库的使用: 13.4 动态库 动态库的打包: 动态库的使用: 13.5 动态库与静态库怎么选? 十三.动态库与静态库 13.1 认识动静态库 …

【毕业设计】基于STM32的解魔方机器人

1、方案设计 1.采用舵机作为魔方机器人的驱动电机,从舵机的驱动原理可知:舵机运行的速度和控制器的主频没有关系,所以采用单片机和采用更高主频的嵌入式处理器相比在控制效果上没有什么差别。单片机编程过程简单,非常容易上手&am…

orb-slam2学习总结

目录 视觉SLAM 1、地图初始化 2、ORB_SLAM地图初始化流程 3、ORB特征提取及匹配 1、对极几何 2、对极约束 (epipolar constraint) 3、基础矩阵F、本质矩阵E 5、单目尺度不确定性 6、单应矩阵(Homography Matrix) 6.1 什么是单应矩…

【Spark精讲】RDD特性之数据本地化

首选运行位置 上图红框为RDD的特性五:每个RDD的每个分区都有一组首选运行位置,用于标识RDD的这个分区数据最好能够在哪台主机上运行。通过RDD的首选运行位置可以让RDD的某个分区的计算任务直接在指定的主机上运行,从而实现了移动计算而不是移…

【matlab进阶学习-6】 读取log数据data.txt文件,并做处理,导出报告/表格/图表

原始文件 原始文件格式txt,每一行对应一个数据,数据之间由逗号分割开 对应意思 时刻,电压,电流,功率,容量,,电流,功率,,RTC时间,状态…

内网服务器部署maven私服简记

前言 很多企业希望创建自己的maven私服,但服务器无法和外网连通,所以这里介绍一套完整的内网部署nexus的解决方案。实现的方式也很简单,将下载好的nexus安装和项目所需的依赖仓库都上传到服务i去上去,通过脚本的方式实现批量导入…

CSS的三大特性(层叠性、继承性、优先级---------很重要)

CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠性 场景:相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 原则:  样式冲突&am…