BigDecimal

作者: vinterx | 来源:发表于2020-02-24 23:03 被阅读0次

一、比较大小

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

  1. BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);

  2. System.out.println(b);//2.22 直接去掉多余的位数

2. ROUND_UP

  1. BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);

  2. System.out.println(c);//2.23 跟上面相反,进位处理

3. ROUND_CEILING(变大)

天花板(向上),正数进位向上,负数舍位向上

  1. BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);

  2. System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP

  3. BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);

  4. System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN

4. ROUND_FLOOR(变小)

地板(向下),正数舍位向下,负数进位向下

  1. BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);

  2. System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN

  3. BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);

  4. System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_UP

5. ROUND_HALF_UP

  1. BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);

  2. System.out.println("ROUND_HALF_UP"+d); //2.23 四舍五入(若舍弃部分>=.5,就进位)

6. ROUND_HALF_DOWN

  1. BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);

  2. System.out.println("ROUND_HALF_DOWN"+e);//2.22 四舍五入(若舍弃部分>.5,就进位)

7. ROUND_HALF_EVEN

  1. BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);

  2. System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN

  3. BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);

  4. System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP

相关文章

网友评论

    本文标题:BigDecimal

    本文链接:https://www.haomeiwen.com/subject/uxgwqhtx.html