java基础-BigDecimal类常用方法介绍
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.BigDecimal类概述
我们知道浮点数的计算结果是未知的。原因是计算机二进制中,表示浮点数不精确造成的。这个时候你需要一个超级大型的浮点数据,并且提供高精度的浮点运算,也就是我们要说的BigDecimal。
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString()
方法提供 BigDecimal 的规范表示形式。
BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP
)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP
)的枚举值。
二.BigDecimal类实现加法,减法和乘法的案例展示
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.demo; 8 9 import java.math.BigDecimal;10 11 public class BigDecimalDemo {12 public static void main(String[] args) {13 function();14 }15 16 public static void function() {17 BigDecimal a = new BigDecimal("0.009");18 BigDecimal b = new BigDecimal("0.001");19 //计算a+b的和,调用add方法20 BigDecimal sum = a.add(b);21 System.out.println(sum);22 23 BigDecimal x = new BigDecimal("1.1");24 BigDecimal y = new BigDecimal("0.28");25 BigDecimal sub = x.subtract(y);26 System.out.println(sub);27 28 BigDecimal m = new BigDecimal("3.14");29 BigDecimal n = new BigDecimal("100");30 BigDecimal mul = m.multiply(n);31 System.out.println(mul);32 }33 }34 35 36 37 /*38 以上代码执行结果如下:39 0.01040 0.8241 314.0042 */
三.BIgDecimal类实现除法
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.demo; 8 9 import java.math.BigDecimal;10 11 public class BigDecimalDemo {12 public static void main(String[] args) {13 function();14 }15 16 public static void function() {17 BigDecimal a = new BigDecimal("9.8");18 BigDecimal b = new BigDecimal("3");19 //计算a/b的商,调用divied方法,20 // BigDecimal div = a.divide(b); //如果除不尽的话会抛出异常:java.lang.ArithmeticException。21 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_UP); //保留三位小数,向上加122 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_DOWN); //保留三位小数,直接舍去23 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_UP); //保留三位小数,当ROUND_HALF_UP>=0.5时,和ROUND_UP功能相同(即向上加1)。24 BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_DOWN); //保留三位小数,如果舍弃部分>0.5时,则舍入行为与ROUN_UP相同(向上加1),否则舍入行为与ROUND_DOWN相同。25 System.out.println(div);26 }27 }28 29 30 31 /*32 以上代码执行结果如下:33 3.26734 */