BigDecimal ROUND_HALF_DOWN精度问题
工作过程中遇到账目不平的bug, 记录如下:
开始认为 BigDecimal.ROUND_HALF_DOWN只看要求精度后面的第一位是否小于等于5, 如果小于等于5,则舍弃精度后面的数, 这其实是不完全对的。
其实还需要看要求精度后面的第二位(如果存在)是否大于等于5, 如果是则会进位,需进位后在进行操作。
举例:
如果bigDecimal值为 1.12345, 要求精度为四位-bigDecimal.setScale(4,BigDecimal.ROUND_HALF_DOWN),则返回值为1.1234;
如果bigDecimal值为1.123455, 要求精度为四位-bigDecimal.setScale(4,BigDecimal.ROUND_HALF_DOWN),则返回值为1.1235;
public class BigDecimalTest {private static BigDecimal bigDecimal; public static void main(String[] args) {test1(new BigDecimal("1.12345"));System.out.println("-------------------------");test1(new BigDecimal("1.123455"));}private static void test1(BigDecimal numb) {bigDecimal = numb;System.out.println(numb);BigDecimal setScale = numb.setScale(4,BigDecimal.ROUND_HALF_DOWN);System.out.println(setScale);BigDecimal setScale2 = numb.setScale(4,BigDecimal.ROUND_HALF_UP);System.out.println(setScale2 );}
}
结果:
BigDecimal ROUND_HALF_DOWN精度问题相关推荐
- java中float、double和BigDecimal的精度问题(fastjson、Jackson以及实例化的方式)
java中float.double和BigDecimal的精度问题(fastjson.Jackson以及实例化的方式): 问题描述 java中如果使用float或double类型的数据初始化BigDe ...
- BigDecimal ROUND_HALF_DOWN与ROUND_HALF_UP的区别
首先看一下JDK中的描述 ROUND_HALF_UP: 向"最接近的"数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式. 遇到.5的情况时往上近似,例: 0.5 -& ...
- BigDecimal.ROUND_HALF_DOWN(五舍六入)
@Testpublic void TestBigDecimalRound() {// 1.BigDecimal.ROUND_HALF_UP表示四舍五入BigDecimal roundHalfUp = ...
- BigDecimal类(精度计算类)的加减乘除
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- Java中BigDecimal解决精度丢失问题
1.我们先看一个例子 可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题.那么我们如果在进行商品价格计算的时候,就会出现问题.很有可能造成我们手中有0.06元,却无法购买一个0.05元和一 ...
- 在进行商业运算时解决BigDecimal的精度丢失问题
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...
- BigDecimal丢失精度的坑
问题:new BigDecimal(double d)的数值居然还是不精确的 double d = 0.09; BigDecimal bigDecimal=new BigDecimal(d); Sys ...
- 关于json 转换BigDecimal精度丢失问题
今天在转换一个关于金额字段发现一个关于json转换的bug 目前尚未深入观察 问题: 如果金钱为bigdecimal json转换后不会丢失精度 但是通过@responsebody 返回到前端后发现 ...
- BigDecimal的8种精度取舍方式
package cn.xbz;import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import j ...
最新文章
- 一个球从100米高度自由落下,每次落地后反弹回原高度的一半; * 再落下,求在第几次之后反弹高度小于0.1米, * 并计算在这一次落地时共经过多少米?...
- ASP.NET2.0中的全球化与本地化UICulture,Culture
- PMM 对MYSQL 的监控配制
- c++ 纯虚成员函数+抽象基类
- 科大星云诗社动态20210521
- 工程师也是主播界“扛把子”,学员抱紧大腿痴痴等候百度AI快车道下期到来...
- Android背景色渐变效果(shape,gradient) (转)
- MySQL中update一条record的过程
- 关于数据分析的4点心得:维度、指标、KPI
- Ubuntu18.04之有道词典安装
- Google的十个核心技术,互联网营销
- 触摸屏调出虚拟键盘_苹果最新专利申请被曝光:“真实触感虚拟键盘”可能会用于ipad和笔记本电脑!...
- 推荐给大家一个恶搞代码,让你的好友电脑关机----关机代码
- 社区保密计算机使用制度,社区保密工作制度
- 几种常见的7号电池的容量
- php url中文转码
- 代码坏味道 之 9 基本类型偏执 primitive obsession
- 未群发消息接腾讯服务器吗,腾讯企业QQ(协同)如何设置并群发消息?
- 内部资料泄密,电信拨号软件系最大流氓软件
- 文字语义纠错技术探索与实践-张健