BigDecimal不整除的一个异常java.lang.ArithmeticException
2016-11-13 15:32
453 查看
转载地址:http://blog.csdn.net/jobjava/article/details/6764623
金额的数据类型是BigDecimal
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:Java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)
应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....
解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。
也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.
四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP
BigDecimal定义了一下舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,
下面简单介绍,详细请查阅J2se API文档
金额的数据类型是BigDecimal
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常的,异常如下:Java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)
应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....
解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
在 java中, 四舍五入通过 BigDecimal 来实现。一定要注意:BigDecimal is Immutable。
也就是跟String一样,对前一个的修改,比如setScale(), add()等都会返回一个新的BigDecimal.
四舍五入舍入模式是 BigDecimal.ROUND_HALF_UP
BigDecimal定义了一下舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,
下面简单介绍,详细请查阅J2se API文档
static int | ROUND_DOWN Rounding mode to round towards zero. 向零方向舍入 |
static int | ROUND_FLOOR Rounding mode to round towards negative infinity. 向负无穷方向舍入 |
static int | ROUND_HALF_DOWN Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入,例如1.55保留一位 小数结果为1.5 |
static int | ROUND_HALF_EVEN Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数, 使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN |
static int | ROUND_HALF_UP Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up. 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位 小数结果为1.6 |
static int | ROUND_UNNECESSARY Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary. 计算结果是精确的,不需要舍入模式 |
static int | ROUND_UP Rounding mode to round away from zero. 向远离0的方向舍入 |
相关文章推荐
- BigDecimal不整除的一个异常java.lang.ArithmeticException
- BigDecimal不整除的一个异常java.lang.ArithmeticException: Non-terminating decimal expansion
- BigDecimal不整除的一个异常java.lang.ArithmeticException
- BigDecimal不整除的一个异常
- Hibernate中的一个异常Initial SessionFactory creation failed.java.lang.ClassFormatError:....
- 详谈Java中BigDecimal的一个除法异常
- java.lang.IllegalStateException: Fragment not attached to Activity异常的一个场景
- 一个困扰很久的异常—java.lang.NoClassDefFoundError: com/google/gson/Gson
- 一个“java.lang.NoSuchMethodError”异常引发的思考
- 关于网络请求的一个异常bug(java.lang.IllegalArgumentException: Host name may not be null)
- 一个异常org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder:的解决
- 一个异常:Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to
- 一个异常:java.lang.NoSuchMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/se
- JSP页面中出现的一个异常:org.apache.jasper.JasperException: java.lang.NullPointerException
- 一个异常:Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .c
- 2014.08.20 renderNull() 处理JFinal中的一个异常信息:java.lang.IllegalStateException: Committed
- 一个异常的处理java.lang.IllegalStateException
- Java中BigDecimal的一个除法异常
- Junit测试一个spring静态工厂实例化bean的例子,出现java.lang.IllegalArgumentException异常。
- Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException