java基础-BigDecimal类常用方法介绍
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.BigDecimal类概述
我们知道浮点数的计算结果是未知的。原因是计算机二进制中,表示浮点数不精确造成的。这个时候你需要一个超级大型的浮点数据,并且提供高精度的浮点运算,也就是我们要说的BigDecimal。
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString()
方法提供 BigDecimal 的规范表示形式。
BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext
对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,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.010 40 0.82 41 314.00 42 */
三.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); //保留三位小数,向上加1 22 // 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.267 34 */