BigDecimal常用方法

1、使用double和float问题

double和float在平时使用中常常会出现一些意想不到的结果,当我们想进行精确计算时他们显然不是一个好选择,如果想保留小数点后几位显然更难操作。因此在涉及到金钱计算或想指定小数位数时用BigDecimal是最好的选择。

double和float出现的问题

public static void main(String[] args)
    {
        System.out.println(0.2 + 0.1);
        System.out.println(0.3 - 0.1);
        System.out.println(0.2 * 0.1);
        System.out.println(0.3 / 0.1);
    }
    
/*运行结果:    
 0.30000000000000004
 0.19999999999999998
 0.020000000000000004
 2.9999999999999996
 */

2.BigDecimal构造方法

1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用

2.public BigDecimal(int val)  将int表示形式转换成BigDecimal

3.public BigDecimal(String val)  将String表示形式转换成BigDecimal

  //double构造的弊端
  public static void main(String[] args)
    {
        BigDecimal ints= new BigDecimal(2);
        BigDecimal doubles = new BigDecimal(2.3);
        BigDecimal str = new BigDecimal("2.3");

        System.out.println("ins t= " + ints);
        System.out.println("doubles = " + doubles );
        System.out.println("String = " + str );
    }
    /*运行结果:
    ints = 2
    doubles = 2.29999999999999982236431605997495353221893310546875
    Str = 2.3
    */

4.double转BigDecimal方式
用.valueOf()方法、或将double类型转为字符串

    BigDecimal double1 = BigDecimal.valueOf(2.3);
    
    BigDecimal double2 = new BigDecimal(Double.toString(2.3));

3.BigDecimal常用方法,+ - * /

add (BigDecimal value);                        //加法

subtract (BigDecimal value);                   //减法 

multiply (BigDecimal value);                   //乘法

divide (BigDecimal value);                     //除法

divide (BigDecimal divisor, int scale, int roundingMode)  //除法的参数,可设置小数位数和舍入方式

remainder(BigDecimal divisor); //取余

setScale (int scale, int roundingMode)            //设置小数位数,舍入方式

1.加、减、乘、除运算

 public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.5");
        
        System.out.println("a + b =" + a.add(b));
        System.out.println("a - b =" + a.subtract(b));
        System.out.println("a * b =" + a.multiply(b));
        System.out.println("a / b =" + a.divide(b));
}

2.除法有可能会除不尽,这时可以给 divide 方法指定参数

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 

第一个参数表示除数
第二个参数表示小数点后保留位数(设置小数位数可以利用这个参数)
第三个参数表示舍入模式

除法的第三个参数值
    ROUND_DOWN    //向下取整,零方向舍入
    
	ROUND_UP    //向上取整,远离0的方向舍入

  ROUND_HALF_UP    //四舍五入,向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
    
    ROUND_CEILING    //向正无穷方向舍入

    ROUND_FLOOR    //向负无穷方向舍入
    
    ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
    
    ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

    ROUND_UNNECESSARY    //计算结果是精确的,不需要舍入模式

3.设置小数位数和舍入方式 。setScale()

   public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("4.5635");

        a = a.setScale(3, RoundingMode.HALF_UP);    //保留3位小数,且四舍五入
        System.out.println(a);
    }

4、compareTo方法比较大小

//注意:a、b均不能为null,否则会报空指针

BigDecimal a = new BigDecimal (101);
BigDecimal b = new BigDecimal (111);

a.compareTo(b) == -1  a小于b
a.compareTo(b) == 0   a等于b
a.compareTo(b) == 1   a大于b
a.compareTo(b) > -1   a大于等于b
a.compareTo(b) < 1    a小于等于b

https://www.cnblogs.com/bors/p/bigdecimal.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值