java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法

今天在写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
发现报错的语句是:


1

foo.divide(bar));

原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。
解决方法:


1

foo.divide(bar, 2, BigDecimal.ROUND_HALF_UP);

注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的:

两个参数的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数

@param roundingMode rounding mode to apply. 传入round的模式

三个参数的方法:

@param divisor value by which this {@code BigDecimal} is to be divided. 传入除数
@param scale scale of the {@code BigDecimal} quotient to be returned. 传入精度
@param roundingMode rounding mode to apply. 传入round的模式

时间: 2024-08-08 21:53:01

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法的相关文章

BigDecimal除法运算出现java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result的解决办法

今天在使用两个BigDecimal类型的数字做除法运算时,出现了一个如下的异常信息: 1 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result 上网查了一下这个异常的,找到了原因所在:通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常:java.lang.ArithmeticException: Non

Non-terminating decimal expansion; no exact representable decimal result(转)

Non-terminating decimal expansion; no exact representable decimal result - lopper的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/lopper/article/details/5314686 由于需要处理精度比较高的浮点数,所以弃用double类型,改用BigDecimal类来进行数值处理. 在加减乘时都没有出现问题,但是到除法运算时,提示了如下错误: 大概的意思是“无法结束的除

Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法

报异常的方法内使用了Java 7的新特性:自动资源释放,类似于try(){},即在try后面跟一括号,在括号里面对一些资源赋值,try里面的代码块执行完毕之后会自动释放try后面的括号中声明的资源. Java 7 会使用新的Class类型校验器,新的类型校验器将老的校验器分为两步: 1.类型推断 2.类型校验 新的类型校验器通过在javac编译时嵌入类型信息到bytecode中,省略了类型推断这一步,从而提升了classloader的性能. Classload顺序(供参考):  load -> 

java.lang.ArithmeticException: Non-terminating decimal expansion

如有需要可以加我Q群[308742428]大家一起讨论技术. 后面会不定时为大家更新文章,敬请期待. 喜欢的朋友可以关注下. 今天在写一些逻辑处理的时候,报了一个错误信息 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 原始代码: BigDecimal price = (bigprice.divide(bigdprice)).multi

Java调用存储过程时报 The user specified as a definer ('root'@'%') does not exist 解决方法

Caused by: java.sql.SQLException: The user specified as a definer (''@'') does not exist        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)        at com.mysql

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "srand" referenced by "libcocos2dcpp.so"...错误解决

在cocos2d-x 3.5中进行开发的时候,Android代码的编译可能会碰到如下错误:java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "srand" referenced by "libcocos2dcpp.so"... 解决这个问题的办法之一就是把ndk版本从r10d降为r9d,不过这并不是推荐的方法,因为r9d对C++ 11的正则表达式支持不够,以及一些其它的原因. 解决

解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常

EJB本地调用方式:把Webclient和EJB服务端部署到同一个JBoss,client和server通过一个JVM进行通信. Web客户端本地调用时.需引用EJB服务端打包的jar,不需引用JBoss/client下的jar和src下的jndi.properties文件.调用方式例如以下: <%@ page language="java" import="java.util.*,javax.naming.*,com.tgb.ejb.*" pageEncod

【Servlet+Struts2】文件下载时抛出java.lang.IllegalStateException异常的解决方法

java.lang.IllegalStateException这种异常,不代表文件不能下载,不代表程序写错,它在Tomcat抛出完异常之后依然能够正常运行的.只是看着不爽而已,每次下载都要在Tomcat抛出一大堆异常. java.lang.IllegalStateException主要是用了后台把文件丢进respond的缓冲区,然后respond再把下载的文件扔回JSP的情况所造成的.Servlet与Struts2反正是JSP都有可能存在.其主要原因JSP在对缓冲区读,后台JAVA在对缓冲写所导

java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0解决办法

androidstudio编译程序时出现java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0.Unsupported major.minor version 52.这个错误是由于(jdk)高版本的java project使用了低版本的来运行.使用命令(java -version 和 javac -version)查看java