金额的数据类型是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_CEILING
Rounding mode to round towards positive infinity.
向正无穷方向舍入
|
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的方向舍入
|
|
分享到:
相关推荐
Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。 The plug-in of Jmockdata what through random algorithm mock java data. Jmockdata插件通过随机算法模拟...
java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等
当 BigDecimal 值大于 Integer.MAX_VALUE 时,intValue() 方法将抛出 java.lang.ArithmeticException 异常。例如,在上面的示例代码中,若输入的 BigDecimal 值为 2147483648 时,intValue() 方法将抛出“Out of ...
解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal
该 API 或多或少是decimal.js的 API 的一个子集。 这个库和decimal.js之间的差异缩小后的decimal.js 的大小:32.1 KB。 decimal.js-light缩小后的大小:12.7 KB。 该库不包括NaN 、 Infinity或-0作为合法值,也不...
唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; ...
kmulti-bignumber为BigDecimal和BigInteger类型提供了多平台expect声明和actual实现。 下载 repositories { maven { url "https://dl.bintray.com/kmulti/kmulti-bignumber" } } 每个Kotlin模块分别使用以下依赖...
js中bigdecimal所需的jar包,亲测有用。。。。。。。。
javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序...
rules.put("java.math.BigDecimal", "DECIMAL"); rules.put("java.util.Date", "TIMESTAMP"); 在SqlMapAutoGen类的构造函数中,可以自行修改 3)预先定义了模板 temple.xml (请放在D:/test 目录下) temple.xml定义了...
其中BigDecimal-all-last.min.js大小为:26KB GZIP压缩后7K,完全可以用于实际生产过程中。 简单例子: var a = new BigDecimal("1500"); var b = new BigDecimal("33"); alert(a.multiply(b)); alert&#...
apache-commons-math3是java的一种科学计算类库,实现科学计算功能的类库其他语言如python、scala都有很多而且很容易找到资料,java可能是由于这方面的需求不多,所以相关的资料较少,详细的使用还是需要自己去研究...
js中引入BigDecimal-all-last.min.js
JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.
java入门基础,入门宝典,新手学习必备,好东西不容错过!
js 处理大数据计算,bigdecimal的工具包
本版中只有一个用于生产环境的文件:BigDecimal-all-last.min.js,大小为26K,如果WEB服务器打开GZIP压缩,可以减小至7K,如需完整版本请移步至:http://download.csdn.net/detail/aquaqu2009/4575230 简单用法: ...
javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序...
java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包中的类和接口已经被 java.security...
java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统中都遇到它,它提供了一种机制,能够在两个与 GUI 中显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的...