BIgDeimal的加减乘除和大小比较

BIgDeimal的加减乘除和大小比较

  • BigDecimal,是除了8个基本数据类型之外,我们又经常使用的一种数据类型。因为他的可变精度范围,所以经常被使用与价格,计算百分比等。但是BigDecimal所创建的是对象,所以在使用上和其他的数据类型不一样,下面详细看看。
1.BigDecimal概述

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。

一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。

BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象大小的比较

2.Bigdecimal 的常用构造方法
		//尽量用字符串的形式初始化,可以提高精度
        BigDecimal bigDecimal1 = new BigDecimal(33.33);

        BigDecimal bigDecimal2 = new BigDecimal("33.33");

        BigDecimal bigDecimal3 = BigDecimal.valueOf(33.33);

        BigDecimal bigDecimal4 = BigDecimal.ZERO;

        System.out.println(bigDecimal1);    //33.3299999999999982946974341757595539093017578125
        System.out.println(bigDecimal2);    //33.33
        System.out.println(bigDecimal3);    //33.33
        System.out.println(bigDecimal4);    //0
3.Bigdecimal 大小的比较compareTo( )
 		//尽量用字符串的形式初始化,可以提高精度
        BigDecimal bigdemical1 = new BigDecimal("0.005");
        BigDecimal bigdemical2 = new BigDecimal("1000000");
        BigDecimal bigdemical3 = new BigDecimal("-1000000");

		int a = bigdemical.compareTo(bigdemical2);  //-1
		a = 1,表示bigdemical大于bigdemical2;
		a = 0,表示bigdemical等于bigdemical2;
		a = -1,表示bigdemical小于bigdemical2;
4.Bigdecimal 的加减乘除
  • 加法 add()函数 减法subtract()函数 乘法multiply()函数 除法divide()函数 绝对值abs()函数
    //加法
    BigDecimal result1 = num1.add(num2);
    BigDecimal result12 = num12.add(num22);
 
    //减法
    BigDecimal result2 = num1.subtract(num2);
    BigDecimal result22 = num12.subtract(num22);
 
    //乘法
    BigDecimal result3 = num1.multiply(num2);
    BigDecimal result32 = num12.multiply(num22);
 
    //绝对值
    BigDecimal result4 = num3.abs();
    BigDecimal result42 = num32.abs();
 
        //除法
	BigDecimal bigDecimal5 = new BigDecimal("4");

	BigDecimal bigDecimal6 = new BigDecimal("8");

	BigDecimal bigDecimal7 = new BigDecimal("16.00");

	BigDecimal bigDecimal8 = new BigDecimal("3");

	BigDecimal result1 = bigDecimal6.divide(bigDecimal5);
	System.out.println(result1);    2

    BigDecimal result2 = bigDecimal7.divide(bigDecimal6);
	System.out.println(result2);   //2.00

	//此处会直接报错,因为除不尽的数,会导致超过范围
	//BigDecimal result3 = bigDecimal5.divide(bigDecimal8);

	BigDecimal result3 = bigDecimal5.divide(bigDecimal8, 5, BigDecimal.ROUND_HALF_UP);
	System.out.println(result3);  //1.33333 ,此处为四舍五入
	/*
	除法divide()参数使用
	使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,不然会出现报错

	我们可以看到divide函数配置的参数如下
	即为 (BigDecimal divisor 除数, int scale 精确小数位,  int roundingMode 舍入模式)
	*/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值