【Java 常用类】(6)java.math.BigDecimal的常用方法(一文简单学完BigDecimal的常用方法)




前言

java.math包:提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。

  包下一共也就才三个类:BigDecimal、BigInteger、MathContext(从没用过)。重点掌握前两个。我想很多学C/C++的选手学习Java主要就是这两个类吧。

  我的上一篇博客【Java 常用类】(5)java.math.BigInteger的常用方法(一文简单学完BigInteger的常用方法)讲了BigInteger的常用方法。这一篇讲讲BigDecimal。

一、大纲

不可变的、任意精度的有符号十进制数。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
在这里插入图片描述

public class BigDecimal extends Number implements Comparable<BigDecimal>

二、使用

1.字段

分别是BigDecimal类型的0,1,10

BigDecimal zero = BigDecimal.ZERO;
BigDecimal one = BigDecimal.ONE;
BigDecimal ten = BigDecimal.TEN;
System.out.println(zero); // 0
System.out.println(one); // 1
System.out.println(ten); //10

2.构造器

2.1 字符串类型转换构造器

字符串类型,转换成BigDecimal类型构造器,这个构造器非常有用。尤其是科学计数法!

        // String类型转BigDecimal
        BigDecimal stringB1 = new BigDecimal("123.456");
        BigDecimal stringB2 = new BigDecimal("-123.456");
        BigDecimal stringB3 = new BigDecimal("0.123E3"); // 科学计数法
        BigDecimal stringB4 = new BigDecimal("0.123E+3"); // 科学计数法
        BigDecimal stringB5 = new BigDecimal("0.123E-3"); // 科学计数法
        BigDecimal stringB6 = new BigDecimal("-0.123E-3"); // 科学计数法
        BigDecimal stringB7 = new BigDecimal("-0.123E-3"); // 科学计数法
        System.out.println(stringB1); // 123.456
        System.out.println(stringB2); // -123.456
        System.out.println(stringB3); // 123
        System.out.println(stringB4); // 123
        System.out.println(stringB5); // 0.000123
        System.out.println(stringB6); // -0.000123
        System.out.println(stringB7); // -0.000123
2.2 其他类型转换构造器

下面几个构造器只是把其他类型的值转换成BigDecimal类型。

        BigDecimal intB = new BigDecimal(123); // int类型转BigDecimal
        BigDecimal longB = new BigDecimal((long) 123); // long类型转BigDecimal
        BigDecimal bigIntegerB = new BigDecimal(new BigInteger("123")); // BigInteger类型转BigDecimal
        BigDecimal doubleB = new BigDecimal(123.456); // duoble类型转BigDecimal
        BigDecimal charB = new BigDecimal( new char[]{'1', '2', '3'}); // char[]类型转BigDecimal
        System.out.println(intB); // 123
        System.out.println(longB); // 123
        System.out.println(bigIntegerB); // 123
        System.out.println(doubleB); // 123.45600000000(后面还有很多为,传double是有不可预知性的)
        System.out.println(charB); // 12

3.常用方法

3.1 算数运算符(加减乘除 + 取余)

该类提供的方法,用于进行算数运算

        BigDecimal b1 = new BigDecimal("100.0");
        BigDecimal b2 = new BigDecimal("10.0");

        // 加减乘除 + 取余
        BigDecimal add = b1.add(b2);
        BigDecimal subtract = b1.subtract(b2);
        BigDecimal multiply = b1.multiply(b2);
        BigDecimal divide = b1.divide(b2);
        BigDecimal remainder = b1.remainder(b2);

        System.out.println(add); // 110.0
        System.out.println(subtract); // 90.0
        System.out.println(multiply); // 1000.00
        System.out.println(divide); // 10
        System.out.println(remainder); // 0.0
                
        // 商 + 余
        BigDecimal[] bigDecimals = b1.divideAndRemainder(b2);
        for (int i = 0; i < bigDecimals.length; i++) {
            System.out.println(bigDecimals[i]);
        }
3.2 比较两数大小
        BigDecimal b1 = new BigDecimal("100.0");
        BigDecimal b2 = new BigDecimal("10.0");

        // b1大于b2返回1,等于返回0,小于返回-1
        int compareTo = b1.compareTo(b2); 
        System.out.println(compareTo);

        // 比较大小并返回
        BigDecimal min = b1.min(b2);
        BigDecimal max = b1.max(b2);
        System.out.println(min);
        System.out.println(max);
3.3 和Math类相同的方法
		BigDecimal b1 = new BigDecimal("100.0");

        BigDecimal abs = b1.abs(); // 绝对值
        BigDecimal pow = b1.pow(2); // n次幂

        System.out.println(abs); // 100.0
        System.out.println(pow); // 10000.00
3.4 继承父类的方法

从父类Object和Number继承而来的方法。

		BigDecimal b1 = new BigDecimal("100.0");

        // BigDecimal类型转换
        int i = b1.intValue();
        long l = b1.longValue();
        float f = b1.floatValue();
        double d = b1.doubleValue();
        System.out.println(i); // 100
        System.out.println(l); // 100 
        System.out.println(f); // 100.0
        System.out.println(d); // 100.0

        // BigDecimal的String类型值
        System.out.println(b1.toString()); // 100.0
        
        // 是否“相等”
        boolean equals = b1.equals(new BigDecimal("100.0"));
        System.out.println(equals); // true
3.5 小数点左移右移

小数点向左移动一位就像于除10,向右移动一位就相当于乘10。

        BigDecimal b1 = new BigDecimal("100.0");

        BigDecimal movePointLeft = b1.movePointLeft(1); // 小数点左移一位
        BigDecimal movePointRight = b1.movePointRight(1); // 小数点右移一位
        System.out.println(movePointLeft); // 10.00
        System.out.println(movePointRight); // 1000
3.6 输出

toEngineeringString()和toString()方法一样,有指数时用科学计数法打印。

		BigDecimal b1 = new BigDecimal("1E3");

        System.out.println(b1.toString()); // 1E+3
        System.out.println(b1.toEngineeringString()); // 1E+3
        System.out.println(b1.toPlainString()); // 1000

总结:

BigDecimal用于处理很大的带小数数,以上就是常用的方法。

剩下一些方法如果你用到了可以去查一下JDK API。

相关链接

上一篇:【Java 常用类】(5)java.math.BigInteger的常用方法(一文简单学完BigInteger的常用方法)

当前篇:【Java 常用类】(6)java.math.BigDecimal的常用方法(一文简单学完BigDecimal的常用方法)

发布了99 篇原创文章 · 获赞 105 · 访问量 9356

猜你喜欢

转载自blog.csdn.net/weixin_44034328/article/details/104080300