一、比较大小
int a = bigdemical1.compareTo(bigdecimal2)
//a = -1,表示bigdemical小于bigdemical2;
//a = 0,表示bigdemical等于bigdemical2;
//a = 1,表示bigdemical大于bigdemical2;
1、BigDecimal(0.1)与new BigDecimal(”0.1″)不相等
因为 0.1 无法准确地表示为 double(或者说对于该情况,不能表示为任何有限长度的二进制小数)。
另一方面,String 构造方法是完全可预知的:写入 new BigDecimal(”0.1″) 将创建一个 BigDecimal,它正好 等于预期的 0.1。因此,比较而言,通常建议优先使用 String 构造方法。
2、与0比较
Bigdecimal b = new Bigdecimal("0") 与 BigDecimal.ZERO 相等
二、加减乘除
//加减乘除:
BigDecimal bignum1 = new BigDecimal("10");
BigDecimal bignum2 = new BigDecimal("5");
BigDecimal bignum3 = null;
可以通过>0,<0,和==0进行比较
//加法
bignum3 = bignum1.add(bignum2);
System.out.println("和 是:" + bignum3);
//减法
bignum3 = bignum1.subtract(bignum2);
System.out.println("差 是:" + bignum3);
//乘法
bignum3 = bignum1.multiply(bignum2);
System.out.println("积 是:" + bignum3);
//除法
bignum3 = bignum1.divide(bignum2);
System.out.println("商 是:" + bignum3);
3、四舍五入
BigDecimal num = new BigDecimal("2.225667");//一般都会这样写最好
int count = num.scale();
System.out.println(count);//6 返回的是小数点后位数
1. ROUND_DOWN
BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(b);//2.22 直接去掉多余的位数
2. ROUND_UP
BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);
System.out.println(c);//2.23 跟上面相反,进位处理
3. ROUND_CEILING(变大)
天花板(向上),正数进位向上,负数舍位向上
BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP
BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN
4. ROUND_FLOOR(变小)
地板(向下),正数舍位向下,负数进位向下
BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN
BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_UP
5. ROUND_HALF_UP
BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("ROUND_HALF_UP"+d); //2.23 四舍五入(若舍弃部分>=.5,就进位)
6. ROUND_HALF_DOWN
BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println("ROUND_HALF_DOWN"+e);//2.22 四舍五入(若舍弃部分>.5,就进位)
7. ROUND_HALF_EVEN
BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN
BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP