本文概览:介绍BigDecimal的作用、相关的一些使用

1 引入

BigDecimal是为了实现进行dubbo和long的数值运算引入的。如下代码

返回结果为:

0.06999999999999999
401.49999999999994
0.30310000000000004

发现与预想的结果不一样,此时引入了BigDecimal。

2 相关使用

2.1 equals和compareTo

比较是否相等使用compareTo来实现

 返回结果为

equals:0.00!=000000

compareTo:0.00==000000

2.2 判断等于0

1 方法1 通过BigDecimal.ZERO和compareTo方法来实现:

2. 方法2  通过signum方法来实现

2.3 除法divide

1.  解析scale和roundingModel参数含义

(1)scale  小数点后几位

(2)roundingModel 保留位后面小数舍去的方式,

  • BigDecimal.ROUND_DOWN 直接舍去
  • BigDecimal.ROUND_UP  直接向上进位向上取整。如1.1处理后是2;-1.1处理后是-2
  • BigDecimal.ROUND_HALF_UP 四舍五入

2. 对于结果打印要注意两点

  • BigDecimal#longValue()  对结果进行取整。
  • BigDecimal#toString()打印真正值的字符串
  • 代码如下

  结果为:

  1/3=6.67

  转成long为:6

3 最佳实践

3.1 小数相关操作

当需要使用小数构造一个BigDecimal时,建议使用

一定要谨慎使用Double/double作为参数构建BigDecimal,如下

两种方式造成结果如下:

执行结果为,显然第二种结果不是我们想要的结果。

(全文完)

 

 

分类&标签