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

news/2024/10/12 10:21:01

使用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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

redis闪退

由于我长期开启redis,它突然关了,我再打开,就闪退了。通过网上大佬的解决方案,成功解决: 1.打开redis文件,点击redis-cli.exe程序:2.依次输入: shutdawn exit退出redis之后,再次打开就好了。 阅读文档:https://blog.csdn.net/m0_73379880/article/details/128942115

[Java/Spring] 深入理解 : SpringBoot PropertyMapper

1 概述: SpringBoot PropertyMapper 简介PropertyMapper是Spring提供的一个工具类,主要用于重新赋值,转换等操作位于: org.springframework.boot.context.properties.PropertyMapper2 应用场景 场景 :2个异构数据对象的转换在实际工作中,经常会遇到将数据库的实体类 Entit…

--Nacos服务注册与发现的概述与原理--

什么是 Nacos 官网中的概述:Nacos官网链接 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集…

E64 树形DP P3174 [HAOI2009] 毛毛虫

视频链接:E64 树形DP P3174 [HAOI2009] 毛毛虫_哔哩哔哩_bilibili P3174 [HAOI2009] 毛毛虫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// 树形DP O(n) #include <iostream> #include <cstring> #include <algorithm> using namespace std;const int …

NocoBase 与 Appsmith:哪个低代码平台更适合你?

深入了解 NocoBase 和 Appsmith 这两大低代码/无代码开发平台的关键差异。通过我们的深度对比,全面了解它们在数据管理、集成能力、UI/UX 设计等方面的优劣,帮助您选择更适合的开发工具。欢迎回到我们深度对比系列文章,这是本系列的第三篇。在之前我们已经与两个非常优秀的产…

使用 InstallShield 2020 打包项目 安装程序

打开InstallShield 2020程序,单击New填写信息下一步 打包成功效果 注:打包过程中报错,进行如下设置

H3C交换机SSH使用RSA公钥免密登录配置

1.使用puttygen.exe计算RSA 2.保存公钥和私钥 公钥:pub.key 注意:公钥上传到交换机(FTP等方式)。 私钥:private.ppk 3.配置交换机 <Switch> system-view [Switch] public-key local create rsa The range of public key size is (512 ~ 2048). If the key modulus …

AD9129板卡设计原理图:303-两路5.6Gsps 14bit DA FMC子卡

一、板卡概述 FMC303可实现宽波段、双通道、14位、5.6GSPS(2.8gsps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供的采样时钟。此外还为用户提供定制采样控制的触发器输入。FMC303在机械上和电气上符合FMC标准(ANSI/VITA 57.1)。该卡具有…