文章目录
- 前言
- 一、BigDecimal
- 二、使用
- 1.字段
- 2.构造器
- 2.1 字符串类型转换构造器
- 2.2 其他类型转换构造器
- 3.常用方法
- 3.1 算数运算符(加减乘除 + 取余)
- 3.2 比较两数大小
- 3.3 和Math类相同的方法
- 3.4 继承父类的方法
- 3.5 小数点左移右移
- 3.6 输出
- 最后
- 相关
前言
java.math包:提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。
包下一共也就才三个类:BigDecimal、BigInteger、MathContext(从没用过)。重点掌握前两个。我想很多学C/C++的选手学习Java主要就是这两个类吧。
我的上一篇博客讲了BigInteger的常用方法。这一篇讲讲BigDecimal。
一、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。