首页 > 其他分享 >Non-terminating decimal expansion; no exact representable decimal result.

Non-terminating decimal expansion; no exact representable decimal result.

时间:2024-10-12 10:13:30浏览次数:7  
标签:舍入 Non BigDecimal no decimal valueOf UP ROUND divide

使用Bigdecimal 做除法

public static void main(String[] args) {
        // 1、不设置保留位数
        System.out.println(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3)));
        // 2、divide以后再设置保留位数
        System.out.println(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3)).setScale(2, RoundingMode.HALF_UP));
}

出现报错信息:

Exception in thread "main" java.lang.ArithmeticException: 
Non-terminating decimal expansion; no exact representable decimal result.

异常原因:

 Java 中使用 BigDecimal 做除法运算的时候,值有可能是无限循环的小数;

正确写法:需要在 divide 方法中传递另外两个参数 【scale】、【roundingMode】,来定义小数点后的精确位数

public static void main(String[] args) {
        // 1、不设置保留位数
//        System.out.println(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3)));
        // 2、divide以后再设置保留位数
//        System.out.println(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3)).setScale(2, RoundingMode.HALF_UP));
        // 3、正确写法
        System.out.println(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(3), 2, RoundingMode.HALF_UP));
}

舍入模式:

1、ROUND_UP

直接舍去非零的小数位数,对整数位 +1。 

2、ROUND_DOWN

直接舍去小数位数,不对整数位 +1。

3、ROUND_CEILING

如果结果为正数,则舍入行为与 ROUND_UP 相同;如果为负,则舍入行为与 ROUND_DOWN 相同。

4、ROUND_FLOOR

如果结果为正数,则舍入行为与 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 相同。

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。不舍位 . 精度位数小于小数位数会抛出异常。

 

标签:舍入,Non,BigDecimal,no,decimal,valueOf,UP,ROUND,divide
From: https://www.cnblogs.com/wongzzh/p/18459966

相关文章

  • NocoBase 与 Appsmith:哪个低代码平台更适合你?
    欢迎回到我们深度对比系列文章,这是本系列的第三篇。在之前我们已经与两个非常优秀的产品进行了对比:NocoBase与NocoDB:开源无代码工具深度对比CRUD开发工具NocoBase与Refine对比今天,让我们把目光移向Appsmith。NocoBase和Appsmith均为开源的低代码/无代码开发平台,这......
  • [转]使用ts-node运行ts脚本以及踩过的坑
    原文地址:使用ts-node运行ts脚本以及踩过的坑-不作声-博客园-----------------------------------------------------我碰到的情况:跟着下面的案例学习ts快速上手TypeScript|Vue3入门指南与实战案例npm安装ts-node,package.json启动脚本"dev:esm":"nodesrc/esm/ind......
  • 南沙C++信奥赛陈老师解一本通题 1939:【07NOIP普及组】纪念品分组
    ​ 【题目描述】元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完......
  • 基于nodejs+vue基于JAVA的城镇社区服务管理平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,城镇化进程的加快,社区服务管理面临着前所未有的挑战与机遇。传统的社区服务管理模式存在信息不透明、服务效率低、居民参与度不高等......
  • 基于nodejs+vue基于Java的超市进销存系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和商业竞争的日益激烈,超市作为零售业的重要组成部分,其管理效率和服务质量直接关系到企业的生存与发展。传统的超市进销存管理往往依......
  • 基于nodejs+vue基于Java的比亚迪汽车大数据评分系统[开题+源码+程序+论文]计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,大数据技术在各行各业中的应用日益广泛。汽车行业作为国民经济的重要支柱,其数据规模庞大且复杂。比亚迪作为中国新能源汽车的领军企......
  • NOI Linux使用指南
    快捷键Ctrl+Alt+T:打开终端命令ls:列出当前文件夹下所有文件cd[文件夹名称]:进入某个文件夹mkdir[文件夹名称]:新建文件夹touch[文件名称]:新建文件g++x.cpp-oy[编译选项]:生成x.cpp的已编译文件y。编译选项(可叠加):-O2:开启O2-std=c++11:使用C++11编译-......
  • 10.11日noip多校联考总结
    10.11日noip多校联考总结T1看到感觉像是一个很玄学的题目,在考场上推了大概一个多小时,又写了大概半个小时,终于调出来了。谨记:三分取mid需要进行浮点数运算。对于每一行和每一列定义两个数组来记录要加多少,因为我们只需要知道其中任意一个数就可以推出所有的数,那么考虑枚举x0,来......
  • Arduino Nano制作
    1、硬件原理图:2、相关文件路径:boards.txt(包含熔丝位及相关文件的名称信息)路径:D:\arduino-1.85\hardware\arduino\avrATmegaBOOT_168_atmega328.hex路径:D:\应用软件\arduino-1.85\hardware\arduino\avr\bootloaders\atmega3、读取芯片ID:4、进入熔丝位配置:5、设置熔丝位:bo......
  • 多校A层冲刺NOIP2024模拟赛05
    A.好数(number)很容易想到\(n^3\)枚举两个,看第三个是否出现,扩展一下,枚举一个,看剩下需要的和是否出现过,提前处理出两两的和和最早能合出这个数的位置,复杂的\(O(n^2)\)点击查看代码#include<bits/stdc++.h>constintmaxn=5000+10;usingnamespacestd;intn,a[maxn],cnt,......