工作过程中遇到账目不平的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精度问题相关推荐

  1. java中float、double和BigDecimal的精度问题(fastjson、Jackson以及实例化的方式)

    java中float.double和BigDecimal的精度问题(fastjson.Jackson以及实例化的方式): 问题描述 java中如果使用float或double类型的数据初始化BigDe ...

  2. BigDecimal ROUND_HALF_DOWN与ROUND_HALF_UP的区别

    首先看一下JDK中的描述 ROUND_HALF_UP: 向"最接近的"数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式. 遇到.5的情况时往上近似,例: 0.5 -& ...

  3. BigDecimal.ROUND_HALF_DOWN(五舍六入)

    @Testpublic void TestBigDecimalRound() {// 1.BigDecimal.ROUND_HALF_UP表示四舍五入BigDecimal roundHalfUp = ...

  4. BigDecimal类(精度计算类)的加减乘除

    BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...

  5. Java中BigDecimal解决精度丢失问题

    1.我们先看一个例子 可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题.那么我们如果在进行商品价格计算的时候,就会出现问题.很有可能造成我们手中有0.06元,却无法购买一个0.05元和一 ...

  6. 在进行商业运算时解决BigDecimal的精度丢失问题

    System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...

  7. BigDecimal丢失精度的坑

    问题:new BigDecimal(double d)的数值居然还是不精确的 double d = 0.09; BigDecimal bigDecimal=new BigDecimal(d); Sys ...

  8. 关于json 转换BigDecimal精度丢失问题

    今天在转换一个关于金额字段发现一个关于json转换的bug  目前尚未深入观察 问题: 如果金钱为bigdecimal json转换后不会丢失精度 但是通过@responsebody 返回到前端后发现 ...

  9. BigDecimal的8种精度取舍方式

    package cn.xbz;import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import j ...

最新文章

  1. 一个球从100米高度自由落下,每次落地后反弹回原高度的一半; * 再落下,求在第几次之后反弹高度小于0.1米, * 并计算在这一次落地时共经过多少米?...
  2. ASP.NET2.0中的全球化与本地化UICulture,Culture
  3. PMM 对MYSQL 的监控配制
  4. c++ 纯虚成员函数+抽象基类
  5. 科大星云诗社动态20210521
  6. 工程师也是主播界“扛把子”,学员抱紧大腿痴痴等候百度AI快车道下期到来...
  7. Android背景色渐变效果(shape,gradient) (转)
  8. MySQL中update一条record的过程
  9. 关于数据分析的4点心得:维度、指标、KPI
  10. Ubuntu18.04之有道词典安装
  11. Google的十个核心技术,互联网营销
  12. 触摸屏调出虚拟键盘_苹果最新专利申请被曝光:“真实触感虚拟键盘”可能会用于ipad和笔记本电脑!...
  13. 推荐给大家一个恶搞代码,让你的好友电脑关机----关机代码
  14. 社区保密计算机使用制度,社区保密工作制度
  15. 几种常见的7号电池的容量
  16. php url中文转码
  17. 代码坏味道 之 9 基本类型偏执 primitive obsession
  18. 未群发消息接腾讯服务器吗,腾讯企业QQ(协同)如何设置并群发消息?
  19. 内部资料泄密,电信拨号软件系最大流氓软件
  20. 文字语义纠错技术探索与实践-张健

热门文章

  1. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面试读版
  2. 实现php Curl 调用不同项目中方法
  3. Shell 编程规范与变量
  4. 论文总结-交通预测(未完成)
  5. 转载 冯羽的程序生涯之我见
  6. 天嵌i.mx6q--1
  7. Python深度学习基础(二)——反向传递概念透彻解析以及Python手动实现
  8. Win7 SMTP 服务器代替工具
  9. WiFi穿墙手册:解读天线、dbi、发射功率和无线信号的关系
  10. 完美解决html表格表头固定存在的问题