转载请注明出处:
目录
1.BigDecimal 简介
2.构造BigDecimal的对象
3.常用方法总结
4.divide方法使用
5.setScale 方法使用
6.BigDecimal 数据库存储类型对应 decimal
1.BigDecimal 简介
在进行浮点数 long 或 double 类型的运算时,如果直接进行运算,浮点数的运算会出现精度失准的情况,特别是在计算和金额相关的运算时,必须计算精确,不能出现误差,BigDecimal 的出现就是为了解决 浮点数类型的运算精度失准的场景;
示例:
运行后的结果如下:
2.构造BigDecimal的对象
BigDecimal提供了丰富的构造函数,可以通过int、long、double、String等来构造一个BigDecimal对象。
但是,使用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。
所以,通常情况下,我们会使用String对象作为参数来构造一个精确的BigDecimal对象。下面提供的三种方法都是可以的:
3.常用方法总结
- add(BigDecimal): BigDecimal对象中的值相加,返回BigDecimal对象
- subtract(BigDecimal): BigDecimal对象中的值相减,返回BigDecimal对象
- multiply(BigDecimal): BigDecimal对象中的值相乘,返回BigDecimal对象
- divide(BigDecimal): BigDecimal对象中的值相除,返回BigDecimal对象
- toString(): 将BigDecimal对象中的值转换成字符串
- doubleValue(): 将BigDecimal对象中的值转换成双精度数
- floatValue(): 将BigDecimal对象中的值转换成单精度数
- longValue(): 将BigDecimal对象中的值转换成长整数
- intValue(): 将BigDecimal对象中的值转换成整数
- a.max (b) 比较取最大值
- a.min(b) 比较取最小值
- a.abs() 取最绝对值
- negate(): 取相反数
- (BigDecimal).compareTo(BigDecimal2) : 比较两个BigDecimal 对象的大小; 返回值为-1,表示bigdemical小于bigdemical2; 返回值为 0,表示bigdemical等于bigdemical2; a = 1,表示bigdemical大于bigdemical2;
4.divide方法使用
BigDecimal中的divide主要就是用来做除法的运算。 方法定义如下:
第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。 第三个参数可以使用如下常量配置:
进行除法运算,并四舍五入
执行结果为 :11.10
5.setScale 方法使用
setScale(1)表示保留一位小数,默认用四舍五入方式
示例:
1、BigDecimal.ROUND_UP 四舍五入,BigDecimal.ROUND_DOWN 直接舍弃保留位数之后小数;2、位数不够时,不会补齐
6.BigDecimal 数据库存储类型对应 decimal
BigDecimal 数据保存在 Mysql 的时候,可以使用 decimal 的数据库数据类型
decimal(m,d)
m是数字的最大位数,他的范围是从1-65;
d是小数点后的位数,他的范围是0-30,并且不能大于m。
如果m被省略了,那么m的值默认为10,
如果d被省略了,那么d的值默认为0.
举例表示:
1、decimal(5,2) 所指代的范围是-999.99~999.99 数字的最大位数是5位,小数点右侧是2位,即有两位小数。
2、decimal(7,6)所指代的范围是-9.999999~9.999999 数字的最大位数是7位,小数点右侧是6位,即有六位小数。