BigDecimal进行除法divide运算注意事项

Java编程中

BigDecimal进行除法divide运算时,如果结果不整除,出现无限循环小数。则会抛出以下异常:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

应用场景:一批中供客户的单价是1000元/年,如果按月计算的话1000/12=83.3333333333....

解决之道:就是给divide设置精确的小数点divide(除数,2, BigDecimal.ROUND_HALF_EVEN)

保留2位小数,四舍五入!

时间: 2024-10-15 10:39:49

BigDecimal进行除法divide运算注意事项的相关文章

BigDecimal进行除法运算时的坑

循环小数输出的坑 BigDecimal做除法时如果出现除不尽(循环小数)的情况,会抛异常: BigDecimal a = new BigDecimal("1"); System.out.println(a.divide(new BigDecimal(3))); 异常如下: Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no ex

bigdecimal类型除法问题

坑:bigdecimal类型做除法运算时,结果为整数或有限小数时候不存在问题,若结果无法整除,为无限小数时报错 错误代码:Bigdecimal  b = a.divide(c).setScale(5,ROUND_HALF_DOWN); 错误提示:Non-terminating decimal expansion; no exact representable decimal result" 错误翻译:十进制小数点膨胀:没有确切的表示十进制的结果 错误原因:暂时不详 代码改进:BigDecimal

5.5 除法的运算过程

计算机组成 5 乘法器和除法器 5.5 除法的运算过程 在加.减.乘.除这样的基本算数运算当中,除法是最为复杂的.因此,我们想要实现硬件的除法器,还是从最简单的情况开始说起. 我们还是采用纸笔进行模仿除法运算的方式,来回顾一下除法的运算过程.这里是两个十进制的数,被除数是1001010,除数是1000.这是两个经过精心挑选的数,用它们进行除法运算,运算的过程中只会出现0或者1,所以看上出又像是二进制表示的数.所以我们通过这个例子可以看出十进制的除法运算和二进制的除法运算之间的联系.这个运算的过程

BigDecimal实现精确加减乘除运算

BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val)Translates a double into a BigDecimal. 第二种:BigDecimal(String val)Translates the String repre sentation of a BigDecimal into a BigDecimal. 使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,

JAVA经BigDecimal圆角的解决方案及注意事项

/** * @Description: 四舍五入住宿2小数位数 * @param valueName * @return */ public static Double formateDouble45(Double d){ if(d == null){ return 0d; } BigDecimal b = new BigDecimal(d); double f = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return f;

java运算注意事项

/* 对于byte.short.char.插入三种类型来说,如果右侧固执的数值没有超过范围,那么java编译器就会自动隐含地位我们 补上一个(byte) ,(short),(char) 1.如果没有超过左侧的范围,编译器补上强转 2.如果超过了左侧范围,那么直接编译报错 */ public class Demo02Notice{ public static void main(String[] args){ //右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的 // int————>

Java BigDecimal 转换,除法陷阱(转)

源地址:   http://blog.csdn.net/niannian_315/article/details/24354251 今天在用BigDecimal“出现费解”现象,以前虽然知道要避免用,但没研究过.借此机会,查证一下分享给大家参详参详. 在Java中经常可以用到double转BigDecimal,也经常进行除法运算,但是以下用法需要特别小心了. Java代码   package com.ccxe.number; import java.math.BigDecimal; import

精确运算--BigDecimal

工具类 ,直接就可以使用,对于float和double的进行加减乘除长生的误差的解决办法. import java.math.BigDecimal; public class Arith { // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private Arith() { } /** * * 提供精确的加法运算. * * @param v1 * 被加数 * * @param v2 * 加数 * * @re

使用BigDecimal进行精确运算

使用BigDecimal进行精确运算 首先我们先来看如下代码示例: 1 public class Test_1 { 2 public static void main(String[] args) { 3 System.out.println(0.06+0.01); 4 System.out.println(1.0-0.42); 5 System.out.println(4.015*100); 6 System.out.println(303.1/1000); 7 } 8 9 } 运行结果如下.