首页 > 编程语言 >Rounding necessary错误解决Java的BigDecimal除法的

Rounding necessary错误解决Java的BigDecimal除法的

时间:2024-08-12 14:49:31浏览次数:13  
标签:舍入 Java BigDecimal rs Rounding setScale 小数位 RoundingMode

出现Rounding necessary错误原因是使用了 BigDecimal 的 setScale 方法导致。

错误原因:setScale方法保留小数位数小于实际位数并且未指定roundingMode参数即报错。如下代码:

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(2);

上述代码实际数值是2057.9200是4位小数,而使用setScale方法保留2位小数时会报错。
解决方法:

【一、指定setScale的第二个参数roundingMode(推荐)】

如下所示:

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(2, RoundingMode.HALF_UP);

setScale的第二个参数为roundingMode,此值是一个常量,具体取值及含义可通过JDK文档查得

RoundingMode枚举定义了多种舍入模式,例如:

RoundingMode.UP:远离零方向舍入。
RoundingMode.DOWN:向零方向舍入。
RoundingMode.CEILING:向正无穷方向舍入。
RoundingMode.FLOOR:向负无穷方向舍入。
RoundingMode.HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
RoundingMode.HALF_DOWN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向下舍入的舍入模式。
RoundingMode.HALF_EVEN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
RoundingMode.UNNECESSARY:断言请求的操作具有精确的结果,因此不需要舍入

【二、保留小数位数大于/等于实际小数位数】

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(5);

保证保留的小数位数大于等于实际小数位数也可以,但很多时候我们不知道实际小数位数是多少,所以建议使用第一种方式解决。

标签:舍入,Java,BigDecimal,rs,Rounding,setScale,小数位,RoundingMode
From: https://www.cnblogs.com/xiaop27/p/18354956

相关文章

  • 最新Java面试题及答案(500道)
    第一章-Java基础篇Object中有哪些方法   难度系数:⭐protectedObjectclone()--->创建并返回此对象的一个副本。booleanequals(Objectobj)--->指示某个其他对象是否与此对象“相等protectedvoidfinalize()--->当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃......
  • Java入门学习——Day04 运算符
            在Java编程中,运算符是基本的构建块,用于执行各种操作,如算术、比较和逻辑操作。了解运算符的使用对于编写正确的代码非常重要。目录一、算数运算符1.加法2.减法3.乘法4.除法二、赋值运算符1.赋值2.加赋值3.减赋值4.乘赋值5.除赋值6.取余赋值三、......
  • java中的命名规范(阿里巴巴)
    (一)命名风格1.命名不能以下划线开始,也不能以下划线结束。2.命名严禁使用拼音与英文混合的方式,更不允许使用中文。但是:alibaba/taobao hangzhou等国际通用的名称,可视同英文。3.类名使用大驼峰风格,必须遵从驼峰形式。即每个单词首字母大写。类名如果有复数含义,类名......
  • 为了给Javaer落地DDD,我们不得不写开源组件
    本文上回书接《这是DDD建模最难的部分(其实很简单)》,欢迎关注我的同名公众号。https://mp.weixin.qq.com/s/HZKMLF0_I10iczzp2mAR-w 故事背景2013年中,我们的Java后端团队为了落地DDD,全面引入了dotnet技术栈,具体过程和成果,可以看我的B站频道《Java8到.NET8,团队升级报告-第......
  • JAVA自学练习网站——包会的(大三学生倾情推荐)
    一、自述:入门时我踩过的那些坑1.比起给我这些本科生上课,老师更关心自己的科研项目和手里的硕士博士,讲课还不如高中老师,跟着只会念PPT的老师学,越学越头大。2.只完成课后老师布置的一两道习题,等真正考试自己操作了根本不会。3.大学教学任务多的几节课就是一章,课后不自己学习很......
  • 【Redis】掌握Java中的Redis魔法:Jedis与Spring Data Redis(实战指南)
    文章目录掌握Java中的Redis魔法:Jedis与SpringDataRedis实战文章简介为什么使用Redis为什么选择Jedis和SpringDataRedis一、引言1.1Redis简介1.1.1Redis的特点和优势1.1.2Redis的应用场景1.2Java与Redis的结合1.2.1为什么选择Java1.2.2Java开发中Redis的重要......
  • 计算机毕业设计必看必学! ! 89344 springboot大学生就业管理系统,原创定制程序, java、
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对大学生就业管理系统等问题,对大学生就业管理系统进行研究分析,然后开发设计出大学生就业管理......
  • Java线程池和执行流程
    在Java中,常见的四种线程池包括:1.newFixedThreadPool(固定大小线程池)应用场景:适用于需要限制线程数量,并且任务执行时间比较均匀的场景,例如服务器端的连接处理。优点:线程数量固定,能够有效地控制并发线程数,避免过多的线程竞争资源。缺点:如果线程在执行任务过程中出现异常......
  • java中去重复的id
    1.Stringprojectids="";2.if(StringHelper.isNotEmpty(gatheringinfo.getCol1())&&gatheringinfo.getCol1().length()>0){projectids+=gatheringinfo.getCol1()+",";}3.if(StringHelper.isNotEmpty(projectids)){projectids=......
  • Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)
    一、并行性和超时您可以指示TestNG以各种方式在单独的线程中运行测试。可以通过在suite标签中使用parallel属性来让测试方法运行在不同的线程中。这个属性可以带有如下这样的值:二、并行套件(suites)如果您正在运行多个套件文件(例如“ javaorg.testng.TestNGtestng1.xml......