外观
常用类
BigInteger类
BigInteger是一个支持任意精度、任意长度的大整数类,在涉及到数字非常大且要求精度非常准确的情况下就可以使用大整数类,该类使用字符串保存整数。
BigInteger类的构造方法:
BigInteger(String val):创建一个数字大小为val的大整数对象。
BigInteger类的成员方法:
add(BigInteger val):将此BigInteger的值加上val后返回结果表示的BigInteger对象。subtract(BigInteger val):将此BigInteger的值减去val后返回结果表示的BigInteger对象。multiply(BigInteger val)将两个BigInteger表示的值相乘之后返回结果表示的BigInteger对象。divide(BigInteger val):返回两个BigInteger相除的商divideAndRemainder(BigInteger val):返回一个数组,第一个元素表示两个BigInteger相除的商,第二个元素表示两个BigInteger相除后的余数。pow(int exponent):乘方运算,exponent表示指数。negate():取反运算。
BigInteger还有很多数学方法,这里就不一一列举了。
BigDecimal类
BigDecimal是大小数类,该类也同样支持任意精度和任意大小的小数,且没有误差。BigDecimal类的构造方法如下:
- BigDecimal(String val) 创建一个值相当于val的BigDecimal对象。
BigDecimal类的成员方法如下:
add(BigDecimal augend):将两个BigDecimal相加后返回新的BigDecimal。subtract(BigInteger val):将此BigDecimal对象所表示的实数值减去val后返回一个新的BigDecimal。multiply(BigInteger val):将两个BigDecimal对象相乘后返回值为积的BigDecimal对象。divideAndRemainder(BigInteger val):返回一个数组,第一个元素是两个BigDecimal相除的商,第二个元素是两个BigDecimal相除的余数。divide(BigDecimal divisor, int scale, RoundingMode roundingMode):将两个BigDecimal对象相除后返回值为商的BigDecimal对象。其中divisor表示除数,scale表示商的小数保留位数,roundingMode表示最后一位数字的取舍,可选以下几种:
| 符号 | 意义 |
|---|---|
| RoundingMode.UP | 商的最后一位大于0则向前进位 否则向后进位 |
| RoundingMode.DOWN | 舍弃商的最后一位 |
| RoundingMode.CEILING | 若商大于0则按照UP处理 若商小于0则按照DOWN处理 |
| RoundingMode.FLOOR | 若商小于0则按照DOWN处理 若商大于0则按照UP处理 |
| RoundingMode.HALF_DOWN | 四舍五入 若最后一位小于等于5则舍弃 若大于5则进位 |
| RoundingMode.HALF_UP | 四舍五入 若最后一位小于5则舍弃 若大于等于5则进位 |
| RoundingMode.HALF_EVEN | 若商的倒数第二位为奇数则按UP处理 若商的倒数第二位是偶数则按DOWN处理 |
注意:由于大小数的相除十分复杂,要考虑除不尽的问题,所以我们要考虑小数取舍的问题。
pow(int n)乘方运算。negative()取相反数运算。
package FrequentClasses.UtilClasses;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
public class ClassBigIntegerAndBigDecimal {
public static void main(String[] args) {
//下方演示怎么使用大整数类 该类可以存储任意精度的整数值
BigInteger bigInteger1 = new BigInteger("987654321123456789009876543210");
BigInteger bigInteger2 = new BigInteger("123456789009876543211234567890");
//大整数可以进行加减乘除等基本运算
System.out.println(bigInteger1 + " + " + bigInteger2 + " = " + (bigInteger1.add(bigInteger2)));
System.out.println(bigInteger1 + " - " + bigInteger2 + " = " + (bigInteger1.subtract(bigInteger2)));
System.out.println(bigInteger1 + " × " + bigInteger2 + " = " + (bigInteger1.multiply(bigInteger2)));
System.out.println(bigInteger1 + " ÷ " + bigInteger2 + " = " + (bigInteger1.divide(bigInteger2)));
//大整数可以进行求余运算 返回一个数组 第一个是商 第二个是余数
System.out.println(bigInteger1 + " 除以 " + bigInteger2 + " 的余数是 " + bigInteger1.divideAndRemainder(bigInteger2)[1]);
//大整数可以进行乘方和取相反数运算
System.out.println(bigInteger1 + " 的平方是 " + bigInteger1.pow(2));
System.out.println(bigInteger1 + " 的相反数是 " + bigInteger1.negate());
//下方演示怎么使用大小数类 该类可以存储任意精度的小数值
BigDecimal bigDecimal1 = new BigDecimal("1234567890.0987654321");
BigDecimal bigDecimal2 = new BigDecimal("9876543210.0123456789");
//大整数可以进行加减乘除等基本运算
System.out.println(bigDecimal1 + " + " + bigDecimal2 + " = " + (bigDecimal1.add(bigDecimal2)));
System.out.println(bigDecimal1 + " - " + bigDecimal2 + " = " + (bigDecimal1.subtract(bigDecimal2)));
System.out.println(bigDecimal1 + " × " + bigDecimal2 + " = " + (bigDecimal1.multiply(bigDecimal2)));
//注意 由于大小数的除法很复杂 因为在除不尽的话需要考虑小数点最后的数字取舍情况 因此一般使用除法时会指定小数保留位数和取舍规则
//在该方法中 第一个参数是除数 第二个参数是保留的小数位数 第三个参数是取舍规则
//常用取舍规则
//RoundingMode.UP 商的最后一位大于0则向前进位 否则向后进位
//RoundingMode.DOWN 舍弃商的最后一位
//RoundingMode.CEILING 若商大于0则按照UP处理 若商小于0则按照DOWN处理
//RoundingMode.FLOOR 若商小于0则按照DOWN处理 若商大于0则按照UP处理
//RoundingMode.HALF_DOWN 四舍五入 若最后一位小于等于5则舍弃 若大于5则进位
//RoundingMode.HALF_UP 四舍五入 若最后一位小于5则舍弃 若大于等于5则进位
//RoundingMode.HALF_EVEN 若商的倒数第二位为奇数则按UP处理 若商的倒数第二位是偶数则按DOWN处理
System.out.println(bigDecimal1 + " ÷ " + bigDecimal1 + " = " + (bigDecimal1.divide(bigDecimal2, 50,
RoundingMode.DOWN)));
//大小数可以进行求余运算 返回一个数组 第一个是商 第二个是余数
System.out.println(bigDecimal1 + " 除以 " + bigDecimal2 + " 的余数是 " + bigDecimal1.divideAndRemainder(bigDecimal2)[1]);
//大小数可以进行乘方和取相反数运算
System.out.println(bigDecimal1 + " 的平方是 " + bigDecimal1.pow(2));
System.out.println(bigDecimal1 + " 的相反数是 " + bigDecimal1.negate());
}
}运行结果:
987654321123456789009876543210 + 123456789009876543211234567890 = 1111111110133333332221111111100
987654321123456789009876543210 - 123456789009876543211234567890 = 864197532113580245798641975320
987654321123456789009876543210 × 123456789009876543211234567890 = 121932631137631458331748210343629019963293095577211263526900
987654321123456789009876543210 ÷ 123456789009876543211234567890 = 8
987654321123456789009876543210 除以 123456789009876543211234567890 的余数是 9044444443320000000090
987654321123456789009876543210 的平方是 975461058033836303260021337908428594442350251485778997104100
987654321123456789009876543210 的相反数是 -987654321123456789009876543210
1234567890.0987654321 + 9876543210.0123456789 = 11111111100.1111111110
1234567890.0987654321 - 9876543210.0123456789 = -8641975319.9135802468
1234567890.0987654321 × 9876543210.0123456789 = 12193263112254229536.54138088831112635269
1234567890.0987654321 ÷ 1234567890.0987654321 = 0.12499999887078125001707363279942037426795218242690
1234567890.0987654321 除以 9876543210.0123456789 的余数是 1234567890.0987654321
1234567890.0987654321 的平方是 1524157875262917362.23502514857789971041
1234567890.0987654321 的相反数是 -1234567890.0987654321DecimalFormat类
DecimalFormat类是一个数字格式化类,该类的构造方法如下:
DecimalFormat(String pattern):其中pattern代表格式字符串,各个子字符串的意义如下表:
| 符号 | 意义 |
|---|---|
| 0 | 数字占位符,若该位存在数字则显示该数字,若该位不存在数字则显示0 |
| # | 数字占位符,若该位存在数字则显示数字,若不存在数字则不显示任何字符 |
| . | 小数点 |
| - | 负号 |
| % | 百分号 |
| \u2030 | 千分号 |
| E | 分割科学计数法的小数和尾数 |
| ' | 单引号,转义字符 |
DecimalFormat类的成员方法:
format(double number):按照此DecimalFormat定义时的格式字符串格式化number并返回为字符串。
package FrequentClasses.UtilClasses;
import java.text.DecimalFormat;
public class CLassDecimalFormat {
//改文件演示如何使用数字格式化
//DecimalFormat类是NumberFormat类的一个子类 提供为十进制数字格式化的格式
public static StringBuilder ApplyPattern(String pattern, double value) {
DecimalFormat decimalFormat = new DecimalFormat(pattern); //该构造方法以一个字符串为参数 该字符串即为要格式化的格式
//# 和 0 都是数字占位符 . - , % \u2030(千分号) 都是它们本来的含义 \u00A4 货币记号 E 分割科学计数法的小数和尾数 '单引号 转义字符
StringBuilder result = new StringBuilder();
result.append("原数字: ");
result.append(value);
result.append(" 格式: ");
result.append(pattern);
result.append(" 结果: ");
result.append(decimalFormat.format(value));
return result;
}
public static void main(String[] args) {
System.out.println(ApplyPattern("####.####",123456.123456));
System.out.println(ApplyPattern("0000.0000",123.321));
System.out.println(ApplyPattern("#%",0.8));
System.out.println(ApplyPattern("#\u2030",0.8));
System.out.println(ApplyPattern("###,###",1234567890));
System.out.println(ApplyPattern("####,####",1234567890));
}
}运行结果:
原数字: 123456.123456 格式: ####.#### 结果: 123456.1235
原数字: 123.321 格式: 0000.0000 结果: 0123.3210
原数字: 0.8 格式: #% 结果: 80%
原数字: 0.8 格式: #‰ 结果: 800‰
原数字: 1.23456789E9 格式: ###,### 结果: 1,234,567,890
原数字: 1.23456789E9 格式: ####,#### 结果: 12,3456,7890Random类
Random是随机数类,此类提供了许多生成伪随机数的成员方法。若要获取随机数,需要显示使用new Random()获取一个生成器对象,然后调用该对象的下面的成员方法就可以获取对应的随机数。同时Random类的构造方法还有一个重载形式:Random(long seed),即指定种子。
nextInt():返回一个随机整数。nextInt(int bound):返回一个0到bound的随机整数。nextFloat():返回一个随机单精度浮点值。nextDouble():返回一个随机双精度浮点值。nextBoolean():返回一个随机布尔值。
package FrequentClasses.UtilClasses;
import java.util.Random;
public class ClassRandom {
public static void main(String[] args) {
//本文件演示Random类的使用
Random random = new Random(); //可以指定参数 参数为随机数种子
System.out.println("随机产生一个整数:" + random.nextInt());
System.out.println("随机产生一个0-10间的整数:" + random.nextInt(10)); //返回一个0-10之间的整数
System.out.println("随机产生一个单精度浮点数:" + random.nextFloat());
System.out.println("随机产生一个双精度浮点数:" + random.nextDouble());
System.out.println("随机产生一个布尔值:" + random.nextBoolean());
}
}运行结果:
随机产生一个整数:-657668008
随机产生一个0-10间的整数:8
随机产生一个单精度浮点数:0.627032
随机产生一个双精度浮点数:0.9477657643117339
随机产生一个布尔值:trueSystem类
System类含有很多与系统有关的静态方法和静态对象,如System.in,System.out等。
System类的常用方法:
System.currentTimeMillis():获取当前系统时间的毫秒数。System.exit(int status):以状态码status结束此进程。