BigDecimal 的四舍五入函数详解

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常 我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 阅读详情

BigDecimal.ROUND_HALF_XXX的各种用法

在银行、帐户、计费等领域,BigDecimal提供了精确的数值计算。其中8种舍入方式值得掌握。

1、ROUND_UP

舍入远离零的舍入模式。

在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

注意,此舍入模式始终不会减少计算值的大小。

2、ROUND_DOWN

接近零的舍入模式。

在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

注意,此舍入模式始终不会增加计算值的大小。

3、ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。

4、ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。

5、ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。

6、ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。

7、ROUND_HALF_EVEN    银行家舍入法

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。

如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。

1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

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

相关推荐

关于BigDecimal 的加减乘除计算

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

zhu2000zhu的博客 4975

【异常解决】Non-terminating decimal expansion; no exact representable decimal result.

原因是 Java 中使用 BigDecimal 做除法运算的时候,值有可能是无限循环的小数,所以我们就需要在 divide 方法中传递第二个参数,来定义小数点后的精确位数,否则在不整除的情况下,结果是无限循环的小数,就会抛出上面这个异常。如果结果为正数,则舍入行为与 ROUND_UP 相同;如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

No8g攻城狮的博客 2万+

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5714

BigDecimal除法后保留两位小数

BigDecimal numBigDecimal=new BigDecimal(5.33); numBigDecimal=ConvertNumber(numBigDecimal,3,2);//调用,5.33/3后保留两位小数1.7766666=1.78 //BigDecimal 截取小数位,四舍五入 public BigDecimal ConvertNumber(BigDecimal bi

haibin_hu的专栏 11万+

Silvaco TCAD仿真例库——肖特基二极管正向特性(例子)

此示例演示了肖特基二极管正向特性的仿真。 展示了: 使用 Atlas 语法形成二极管结构 设置阳极的肖特基势垒高度 正向偏置阳极 代码 第一部分:描述设备 mesh(网格) electrodes locations(电极位置) doping distribution(掺杂分布) 这是位于结构左侧和右侧的,2维n型器件,具有重掺杂浮动 p 型保护环区域, (2D n-type device with heavily doped floating p-type guard ring regio.

weixin_41788560的博客 2万+

视觉SLAM的前段后端最详细的梳理(硕士入门知识框架更新)

文章目录视觉SLAM的组成结构视觉里程计(VO)-特征点法 -构建稀疏点云地图-直接法 -构建稠密或半稠密的地图 --需要使用 RGB-D 传感器视觉里程计--总结:SLAM 后端研究滤波器法非线性优化后端方式的差异(有五种优化方式):单目视觉里程计的初始化:运动估计:半直接法运动估计的优化方案:关于解决累计误差的一些方法:关键帧的建图及后端优化:特征的深度估计:图优化的后端研究:视觉与IMU融合的分类:视觉与IMU的融合的优势:存在的问题:优秀的开源: 视觉SLAM的组成结构 视觉里程计(VO) -特

DC 6812

bigdecimal 四舍五入保留两位小数_MySql采坑之四舍五入Round函数

由于前几天做了一个店铺评分的功能,本来SQL就比较简单,取平均值,四舍五入保留1位小数,但是测试测出了一个BUG。2.25的平均值四舍五入居然出现了2.2的取值。下面我们详细说一下。1.先看看测试数据库,其实从这里有些人已经看出问题了,不过你知道为什么吗?下面我们添加几条数据。2.我们写SQL 求一下平均值。SELECT avg(part1),avg(part2) FROM test...

weixin_39709262的博客 2171

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4642

bigdecimal 四舍五入保留两位小数_Python 四舍五入函数 round

小数位的四舍五入在项目中经常用到。你可能有注意到 round 函数不能真正做到四舍五入。round() 函数作用就是,返回浮点数x的四舍五入值。round( x [, n] )简单来说就是在浮点运算的时候丢精度。这个与计算机系统的设计是有关系的,计算机是使用 2 进制进行计算的的,如果我们常用的数学计算或者科学计算,计算机是会丢精度的。因此我们的解决方案其实非常简单就是使用 Decimal 来进...

weixin_39734074的博客 482

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1033

【kubernetes】kubernetes kubeadm init 错误了 怎么回退?

因为虚拟机设置问题首先报错:然后我根据文章修改了核数。重启后,查看VIP运行所在机器,发现机器没有变化然后重新执行初始化后面报错了根据提供的信息,问题主要集中在 kubelet 未能成功启动控制平面组件,导致初始化过程超时。以下是可能的原因及相应的排查步骤:原因 1:kubelet 未运行或运行状态异常正如错误提示所指出,kubelet 可能未运行或处于不健康状态。请按照提示执行以下命令检查 kubelet 的状态和服务日志:根据输出结果,判断 kubelet 是否正常运行。后续一大堆错误。

九师兄 121

BigDecimal除法函数保留小数和四舍五入

商=被除数/除数 关于有的商是小数点后面的是舍去还是保留,这个根据项目中的要求不一样,方式也不一样,我做了一个小小的总结,下面是我算的百分比, double numbe=new BigDecimal((float)a/b).setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); BigDecimal.setScale();//用于格式化小数点 set...

wojiaohb的博客 7585

元数据治理实战:构建企业数据地图与血缘体系

元数据(Metadata)是描述数据的数据,是你能了解“数据是怎么来的”、“它是做什么的”、“能不能用”的基础信息。📌 举个例子:order_idstringods_order定义:平台内用户在订单系统中产生的唯一订单编号更新时间:每天凌晨 2 点,由 Airflow 调度任务生成所属人:张三(数据开发部)🔍 这些信息本身不直接参与计算,但它们是数据可管理、可追踪、可评估的基础。模块实战建议元数据类型技术 + 业务 + 操作元数据三类统一治理治理路径。

晴天彩虹雨的博客 290

bigdecimal 四舍五入保留两位小数_【基础】开发中经常用到的4个四舍五入函数

php 在处理浮点数的时候经常要需要用的四舍五入函数。比如在开发订单中,金额结算,支付,退款等都会涉及到到结算,结算就会用到浮点数类型,偶尔会保留两位小数,这个时候就会用到四舍五入函数了,以下是对这几个函数的讲解,floor函数和ceil函数互相搭配起来可以使php 处理的数据更加真实可靠。floor:舍去取整 ceil:取整,和floor功能相反 round:根据参数选择精度(这是真正的四舍...

weixin_39623350的博客 609

Scrapy爬虫之热门网站数据爬取--------第2关

第2关:小说网站玄幻分类第一页小说爬取 任务描述 本关任务:爬目标网页的3本小说保存到本地MySQL数据库,目标网页为全书网玄幻分类首页。 注:考虑到单机(非分布式)爬虫的爬取时间和测试平台的压力,我们不爬更多页数的小说了,可以作为课下作业自己完善。 xpath匹配:循环获取相同标签下的内容 通过网页分析,我们在获取小说的章节名时,发现他们都在标签<DIV class="clearfix dirconone">下的li的a中: 这时,我们可以先把其中所有的li标签先获取到: titles = r

weixin_44949187的博客 2836

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java四舍五入函数取整_java取整和java四舍五入方法 BigDecimal.setScale()方法详解.

内容:import java.math.BigDecimal;import java.text.DecimalFormat;public class TestGetInt{public static void main(String[] args){double i=2, j=2.1, k=2.5, m=2.9;System.out.println("舍掉小数取整:Math.floor(2)=" ...

weixin_39847034的博客 269

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BigDecimal除法函数保留小数和四舍五入(转)

ROUND_FLOOR:与CEILING相反,往负无穷 1.1-> 1 1.5-> 1 1.8-> 1 -1.1-> -2 -1.5-> -2 -1.8-> -2。ROUND_CEILING: 舍位时往正无穷方向移动 1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -1 -1.5-> -1 -1.8-> -1。ROUND_UP:与ROUND_DOWN,远离0的方向1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -2 -1.5-> -2 -1.8-> -2。

sinat_34842630的博客 1443

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

double进行四舍五入

一、故障现象 排行榜中出现同一物品的评分不同 物品A原为8.5 排行榜中8分 二、导致原因 在查询数据库时,使用mysql 函数对rate 字段进行了处理 round(rate,1) 小数点后 保留一位, 在mysql中,round函数用于数据的四舍五入,它有两种形式: 1、round(x,d) ,x指要处理的数,d是指保留几位小数 这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0; 而在查询排行榜是没有做如上处理 三、解决方案 在查...

qq_42757177的博客 9778

Python 四舍五入函数 round

小数位的四舍五入在项目中经常用到。 你可能有注意到 round 函数不能真正做到四舍五入。 round() 函数作用就是,返回浮点数x的四舍五入值。 round( x [, n] ) 简单来说就是在浮点运算的时候丢精度。 这个与计算机系统的设计是有关系的,计算机是使用 2 进制进行计算的的,如果我们常用的数学计算或者科学计算,计算机是会丢精度的。 因此我们的解决方案其实非常简单就是使用 Decimal 来进行数学计算。 浮点计算丢精度的问题不仅仅是 Python 会遇到的问题,Java

HONEY MOOSE 1897

Java中数学函数的练习以及BigDecimal的练习

各种数学函数的练习数学函数BigDecimal的练习 数学函数 static double abs(double a) 返回 double 值的绝对值。 static float abs(float a) 返回 float 值的绝对值。 static int abs(int a) 返回 int 值的绝对值。 static long abs(long a) 返回 long 值的绝对值。 static double acos(double a) 返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。 s

Jam_CheungFei的博客 492

BigDecimal类的详解【附加:整除报错的解决方案】

一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。

North Spark 784

php round函数输出不对_Python 四舍五入函数 Round

小数位的四舍五入在项目中经常用到。你可能有注意到 round 函数不能真正做到四舍五入。round() 函数作用就是,返回浮点数x的四舍五入值。round( x [, n] )简单来说就是在浮点运算的时候丢精度。这个与计算机系统的设计是有关系的,计算机是使用 2 进制进行计算的的,如果我们常用的数学计算或者科学计算,计算机是会丢精度的。因此我们的解决方案其实非常简单就是使用 Decim...

weixin_39588419的博客 407

BigDecimal

1、代码 public class Test11 { public static void main(String[] args) { //Double BigDecimal bDouble = new BigDecimal(2.3); //int BigDecimal bigDecimal = new BigDecimal(1); //String BigDecimal bString = n...

weixin_42255981的博客 153

Double与BigDecimal 精度问题

转载自:http://superivan.iteye.com/blog/963628 Double与BigDecimal 精度问题 博客分类:  java UP算法  [1] 精确的浮点运算:  在Java里面,有时候为了保证数值的准确性需要精确的数据,先提供一个例子就可以发现问题了:  Java代码   public class Float

lkx94的专栏 1247
上一篇: mysql按照汉字拼音排序
下一篇: JAVA-线程池的基本原理
Java_2017_csdn
博客等级 码龄10年 329粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值