BigDecimal加减乘除及setScale的用法小结

article/2025/9/3 2:19:44

Bigdecimal初始化:

BigDecimal num = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失。

BigDecimal num = new BigDecimal("2.225667");//一般都会这样写最好。

两种方式在下面会有实例比较。

一、setScale

1. ROUND_DOWN

BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);System.out.println(b);//2.22 直接去掉多余的位数

2. ROUND_UP

BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);System.out.println(c);//2.23 跟上面相反,进位处理

3. ROUND_CEILING

天花板(向上),正数进位向上,负数舍位向上

BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UPBigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN

4. ROUND_FLOOR

地板(向下),正数舍位向下,负数进位向下

BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWNBigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP

5. ROUND_HALF_UP

BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);System.out.println("ROUND_HALF_UP"+d); //2.23 四舍五入(若舍弃部分>=.5,就进位)

6. ROUND_HALF_DOWN

BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);System.out.println("ROUND_HALF_DOWN"+e);//2.22 四舍五入(若舍弃部分>.5,就进位)

7. ROUND_HALF_EVEN

BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作  ROUND_HALF_DOWN BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作  ROUND_HALF_UPSystem.out.println("************************************");System.out.println("4.05: "+new BigDecimal("4.05").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.05: 4.0 downSystem.out.println("4.15: "+new BigDecimal("4.15").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.15: 4.2 upSystem.out.println("4.25: "+new BigDecimal("4.25").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.25: 4.2 downSystem.out.println("4.35: "+new BigDecimal("4.35").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.35: 4.4 upSystem.out.println("4.45: "+new BigDecimal("4.45").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.45: 4.4 downSystem.out.println("4.55: "+new BigDecimal("4.55").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.55: 4.6 upSystem.out.println("4.65: "+new BigDecimal("4.65").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.65: 4.6 downSystem.out.println("3.05: "+new BigDecimal("3.05").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.05: 3.0 downSystem.out.println("3.15: "+new BigDecimal("3.15").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.15: 3.2 upSystem.out.println("3.25: "+new BigDecimal("3.25").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.25: 3.2 downSystem.out.println("3.35: "+new BigDecimal("3.35").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.35: 3.4 upSystem.out.println("3.45: "+new BigDecimal("3.45").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.45: 3.4 downSystem.out.println("3.55: "+new BigDecimal("3.55").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.55: 3.6 upSystem.out.println("3.65: "+new BigDecimal("3.65").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.65: 3.6 down

二、BigDecimal的运算——加减乘除

 

参考文章:

https://www.jb51.net/article/196541.htm

https://www.jianshu.com/p/042ab4ec63e6


http://chatgpt.dhexx.cn/article/S3VONVve.shtml

相关文章

2018年5-7月面试经历总结:阿里面试题

第一轮:电话初面 第二轮:技术面谈【技术职位尽量避免多谈管理上的工作】 第三轮:高管复试 第四轮:HR最后确认 一面:首先确认对阿里的意向度(如果异地更会考虑对工作地点(杭州)的意向度&#…

腾讯、阿里面试题 了解B+树吗?

腾讯、阿里面试题: 了解B树吗? 由于MySQL的索引结构是B树,所以B树是大厂的高频面试题,想理解B树,最好先理解B树,下面详细介绍B树、B树 B树 B树的概念 B树又称为B-树,是一种平衡多路查找树,描述B树&#x…

2021.3.10阿里面试题

获得第一行 n m ktempinput() templisttemp.split(" ") nint(templist[0]) mint(templist[1]) kint(templist[2])获得城市二维列表city[] for i in range(n):temp input()templist list(temp)if in templist: #找到起始位置,然后记录下标&…

阿里巴巴面试题- - -JVM篇(十四)

前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,…

总结一下软通外派阿里的面试题

前段时间,面了几家大外派到阿里的项目,所以和大家分享一下面试题 上来就是老套路 面试官:说下你们项目的流程 果咩: 巴拉巴拉。。。。 面试官:你们项目如何使用redis高可用的 果咩:可以使用哨兵模式和C…

阿里巴巴一面 :十道经典面试题解析

1. 用到分布式事务嘛?为什么用这种方案,有其他方案嘛? 什么是分布式事务 谈到事务,我们就会想到数据库事务,很容易就想到原子性、一致性、持久性、隔离性。 分布式事务跟数据库事务有点不一样,它是指事务的参与者、支持事务的服务器、资源…

46 道阿里巴巴 Java 面试题,你会几道?

做技术的有一种资历,叫做通过了阿里的面试。 这些阿里 Java 相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。 希望对大家帮助,祝面试成功,有…

最新出炉的阿里巴巴面试题及答案汇总(513页)

前言 秋招已经结束了,不知道各位有没有拿到自己心仪的offer?最近有不少粉丝去阿里巴巴面试了,回来之后我整理成了一份手册java面试时常用到的面试题(附答案)那么今天分享给大家,祝愿大家都能找到满意的工作…

阿里云面试题

转自:https://yq.aliyun.com/articles/6656 今天为大家分享的是《阿里巴巴常考面试题及汇总答案(上篇)》 原文如下: 一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答&…

历年阿里面试题汇总(2017年不断更新中)

Volatile的特征: A、禁止指令重排(有例外) B、可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。 当读一个volatile变量时,JMM会把线程对应的…

iOS-阿里面试题

先把这个几个面试写出来,各位看官可以试着去网上找找答案。 这些是《蚂蚁金服》的面试题 问题缩减如下: 1:在KVO中,他是怎么知道监听的对象发生了变化? 2:字典的工作原理 ?怎100w个中是怎么快…

最全阿里面试题:已拿offer,阿里P8岗位完整阿里技术面试题目,这些面试题你能答出多少

我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。如 何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是 影响数据库并发访问性能的一个重要因素&#…

阿里 90 道常问面试题及答案(软件测试岗位)

目录 1、问:你在测试中发现了一个 bug,但是开发经理认为这不是一个 bug,你应该怎样解决? 2、问:给你一个网站,你如何测试? 3、在搜索引擎中输入汉字就可以解析到对应的域名,请问如…

阿里面试题及答案

一面 1、自我介绍下自己,不超过3分钟(实际上我的自我介绍不到一分钟) 2、你感觉比本科阶段自己进步了多少,有哪些进步 3、研究生期间最大的进步是什么 4、你觉得你适合从事哪个方向的开发 5、synchronized与lock的区别&#xff0…

最新阿里高级Java面试题(首发,70道,带详细答案)

阿里巴巴 整理的70道阿里的Java面试题,都来挑战一下,看看自己有多厉害。下面题目都带超详细的解答,详情见底部。 1、java事件机制包括哪三个部分?分别介绍。 2、为什么要使用线程池? 3、线程池有什么作用? …

阿里面试官内部题库,阿里发布2022年Java岗(正式版)面试题

阿里巴巴2022年Java架构师岗面试题(正式版) 这不马上就是金三银四的面试跳槽季了嘛,小编也是通过一些小手段为大家拿到了一份阿里巴巴2022年Java架构师岗面试题(正式版)现在分享给大家,这份资料也是阿里面试…

vue打包找不到js或css文件

修改vue.config.js文件中的publicPath 把 / 改成 ./

Vue打包优化篇-CDN加速

优化原因 在没有使用cdn加速之前打包后数据如下,可以看出element-ui、vue、vuex、vue-router这些依赖都打进chunk-vendors.js中导致体积很大,假设再来很多依赖项是不是更大,同时也会影响单页面应用首屏加载速度,所以这里采用一种打…

vue打包后dist的使用

发现问题 vue项目完成打包出dist后准备打开index.html,发现居然页面是一片空白,f12一片报红。 分析问题 经过多次网上查询后发现这是由于vue打包时,脚手架会帮你配置好大量参数,但其中路径publicPath被配置为了"/",需…

vue打包的文件加上版本号

为什么要加版本号?因为有时候打包文件部署上线后发现线上没更新,原因是因为线上环境有缓存,故加上版本号可解决此问题! 在vue.config.js配置: 输出文件名js文件增加版本号: output: {filename: js/[name]…