日常记录——对bigdecimal除法运算时遇到的bug(代码片段)

浅殇忆流年 浅殇忆流年     2022-11-22     423

关键词:

📢📢📢📣📣📣

哈喽!大家好,今天给大家分享一篇最近在项目中遇到BigDecimal除法运算的时候出现的一次bug,希望对大家有所帮助和收获。

✨个人博客:https://blog.csdn.net/weixin_43759352✨

✨公众号:【SimpleMemory】✨

❤️❤️❤️如果有对【后端技术】感兴趣的大佬们,欢迎关注!!!❤️❤️❤️

 最近在项目测试环境中,遇到这样一个问题;查看日志,报错信息如下:

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1693)

通过定位发现:是在代码中使用BigDecimal 的divide方法时出现了异常。 

检查发现:这是因为在BigDecimal 没有整除报的错误,因此我们需要向divide函数传入参数设置保留几位小数。

问题还原

下面通过一个测试代码演示没有整除的场景。

BigDecimal a = new BigDecimal(1);
BigDecimal b = new BigDecimal(3);
BigDecimal result = a.divide(b);
System.out.println("result = " + result);

 

处理办法

我们对其divide方法,设置参数传入几位小数,以及具体的取整模式即可。

BigDecimal result = a.divide(b,2,BigDecimal.ROUND_HALF_UP); // 保留两位小数、四舍五入

如果这篇【文章】对您有帮助,希望大家点赞、评论、关注、收藏;如果对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 公众号【SimpleMemory】❤️❤️❤️,将会继续给大家带来【收获与惊喜】💕💕! 

日常记录

  程序:四则运算  内容:完成有无乘除法,数值范围和运算数字个数的要求  思路:1.对有无乘除进行输入(y,n);2.进行字符串的比对,判断输入的是有还是无;3.若为有,则随机取符号数组前四位(+-*/);... 查看详情

关于bigdecimal类型在jsp页面中进行除法运算问题(代码片段)

问题描述:在项目编写过程中,发现BigDecimal在jsp中进行除法运算时,会有如下问题:假设页面中存在一个BigDecimalpayment.unPayAmount=newBigDecimal(1015228)。由于数据库保存的金额是以分为单位的,所以显示在页面... 查看详情

bigdecimal类型除法问题

坑:bigdecimal类型做除法运算时,结果为整数或有限小数时候不存在问题,若结果无法整除,为无限小数时报错错误代码:Bigdecimal b=a.divide(c).setScale(5,ROUND_HALF_DOWN); 错误提示:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult"错误... 查看详情

java的bigdecimal类的用法

bigdecimal加减乘除运算顺序如下:首先是bigdecimal的初始化,加法 add()函数、减法subtract()函数、乘法multiply()函数、除法divide()函数、绝对值abs()函数。注意:1)System.out.println()中的数字默认是double类型的,double类型小数计算不... 查看详情

java中bigdecimal的一个除法异常

java.lang.ArithmeticException:Non-terminatingdecimalexpansion;noexactrepresentabledecimalresult.说明遇到除不尽的情况了,需要指定商的小数精度和舍入模式。比如:a=b.divide(c,2,RoundingMode.HALF_UP);  查看详情

数字精确运算bigdecimal经常用法

importjava.math.BigDecimal; publicclassArith{ /** *因为Java的简单类型不可以精确的对浮点数进行运算,这个工具类提供精 *确的浮点数运算,包含加减乘除和四舍五入。 */ //默认除法运算精度 privatestaticfinalintDEF_DI... 查看详情

bigdecimal(代码片段)

BigDecimaljava.math.BigDecimal为了解决java中浮点数运算不精确,用这个类可以很好的解决常用构造器建议使用String类型构造方法,否则使用double类型进行初始化可能还是不精确,因为double本身就不够精确构造器说明BigDecimal(Stringval)val必须... 查看详情

bigdecimal源码

import java.math.BigDecimal;/** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */public class Arith{    //默认除法运算精... 查看详情

bigdecimal的精确计算

publicclassArithUtil //默认除法运算精度privatestaticfinalintDEF_DIV_SCALE=10;publicstaticfinaldoubleDB_HUNDRED=100.0;/***提供精确的加法运算。*@paramv1被加数*@paramv2加数*@return两个参数的和*/publicstaticdoubl 查看详情

divisionisundefined错误

1.此错误仅在使用BigDecimal做除法时,且0/0的情况下才会提示。x/0时,仅提示Divisionbyzero。2.BigDecimal判断一个值是否为0时,不能使用equals,因为equals会比较值的大小和精度的大小,即0.00和0.000是不同的。需要使用x.compareTo(BigDecimal.Z... 查看详情

bigdecimal

Java在java.math包中提供API类BigDecimal,用来对超过16位有效位的数进行精确的运算。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必... 查看详情

bigdecimal加减乘除运算整合工具类(代码片段)

...确加法运算*@paramv1被加数*@paramv2加数*@return两个参数的和(BigDecimal)*/publicstaticBigDecimaladd(BigDecimalv1,BigDecimalv2)if(null==v1)v1=BigDecimal.ZERO;if(null==v2)v2=BigDecimal.ZERO;returnv1.add(v2);/***精确减法运算*@paramv1被减数*@paramv2减数*@return两个参数的差... 查看详情

bigdecimal除法问题

BigDecimal类的主要功能是进行小数的大数计算,而且最重要的是可以精确到指定的四舍五入位数。 如果要进行四舍五入的操作,则必须依靠以下的方法:publicBigDecimaldivide(BigDecimaldivisor,intscale,introundingMode)scale:表示四舍五入的... 查看详情

sass-除法

Sass的乘法运算规则也适用于除法运算。不过除了除法运算还有一个特殊之处。众所周知“/”符号在css中已作为一种符号使用,因此在sass中做除法运算时,直接使用"/"符号作为除号时,将不会生效,编译时既得不到我们需要的效果,... 查看详情

由于 SIGFPE、算术异常,除法运算导致错误执行

】由于SIGFPE、算术异常,除法运算导致错误执行【英文标题】:OperationwithdivisionresultinginerrorexecutionbecauseofSIGFPE,Arithmeticexception【发布时间】:2019-04-0810:38:56【问题描述】:我为MCU编写了一个算法,该算法在对除法结果进行更多计... 查看详情

bigdecimal(代码片段)

一、BigDecimal概述二、BigDecimal常用构造函数三、BigDecimal常用方法详解四、BigDecimal格式化五、BigDecimal常见异常六、BigDecimal总结一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双... 查看详情

bigdecimal运算

参考技术ABigDecimal bignum1 =newBigDecimal("10");BigDecimal bignum2 =newBigDecimal("5");BigDecimal bignum3 =null;//加法bignum3 =  bignum1.add(bignum2);    //减法bignum3 = bignum1.subtract(bignum2);... 查看详情

bigdecimal

...更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。  BigDecimal类的主要构造器和方法  构造器描述  BigD 查看详情