数字操作类
2020-12-17 本文已影响0人
曾梦想仗剑天涯
Math数学计算类
- Math类主要功能是进行数学计算的操作类,提供有基础的计算公示,这个类的构造方法被私有化了,而且该类之中提供的所有方法都是static型的方法,即:这些方法都可以通过类名称直接调用;
public class MathApi {
public static void main(String[] args) {
System.out.println(Math.abs(-10.1));
System.out.println(Math.max(10.2, 20.1));
System.out.println(Math.log(5));
System.out.println(Math.round(15.4));
System.out.println(Math.round(-15.51));
System.out.println(Math.pow(10, 2));
}
}
- 虽然在Math里面提供有四舍五入的处理方法,但是这个四舍五入在进行处理的时候,是直接将小数点后的所有位进行进位处理了,这样肯定不方便,最方便的做法是实现指定位数的保留;
class MathUtil {
private MathUtil() {}
/**
* @Description: 实现数据的四舍五入操作
* @Param: [num操作参数, scale保留位数]
* @return: double
* @Author: mars_wu
* @Date: 2020/12/17 下午3:21
*/
public static double round(double num, int scale) {
return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
}
}
public class MathApi {
public static void main(String[] args) {
System.out.println(MathUtil.round(19.8623, 2));
}
}
Random随机数生成类
- java.util.Random类的主要功能是产生随机数的,这个类主要依靠内部提供的方法来完成:
- 产生一个不大于边界的随机正整数:public int nextInt(int bound)
import java.util.Random;
public class MathApi {
public static void main(String[] args) {
Random ran = new Random();
System.out.println(ran.nextInt(100));
}
}
- 随机生产数字大于0且不重复
import java.util.Arrays;
import java.util.Random;
public class MathApi {
public static void main(String[] args) {
int [] data = new int[7];
int foot = 0;
while (foot < 7) {
Random ran = new Random();
int num = ran.nextInt(38);
if (isUse(num, data)) {
data[foot++] = num;
}
}
Arrays.sort(data);
for (int x = 0; x < data.length; x++) {
System.out.print(data[x] + "、");
}
}
/**
* @Description: 判断传入参数是否为0以及数组中是否存在
* @Param: [num随机生成值, temp目标数组]
* @return: boolean true表示当前num可用,false表示当前值不可用
* @Author: mars_wu
* @Date: 2020/12/17 下午3:47
*/
public static boolean isUse(int num, int [] temp) {
if (num == 0) {
return false;
}
for (int x = 0; x < temp.length; x++) {
if (num == temp[x]) {
return false;
}
}
return true;
}
}
大数字处理类
- 大数字操作类可以实现海量数字的的计算(能提供的也只是基础计算),超过了double范围的话,并没有一个数据类型可以保存下此类内容,两个大数字操作类:
- BigInteger :public class BigInteger extends Number implements Comparable<BigInteger>
- BigDecimal:public class BigDecimal extends Number implements Comparable<BigDecimal>
- BigInteger类构造:public BigInteger (String val)
- BigDecimal类构造:public BigDecimal(String val)
import java.math.BigInteger;
public class MathApi {
public static void main(String[] args) {
BigInteger bigA = new BigInteger("283475918273948721983749");
BigInteger bigB = new BigInteger("1982347983");
System.out.println("加法" + bigA.add(bigB));
System.out.println("减法" + bigA.subtract(bigB));
System.out.println("乘法" + bigA.multiply(bigB));
System.out.println("除法" + bigA.divide(bigB));
}
}
- 求余:public BigInteger[] divideAndRemainder(BigInteger val),数组第一个元素为商,第二个元素为余;
import java.math.BigInteger;
public class MathApi {
public static void main(String[] args) {
BigInteger bigA = new BigInteger("283475918273948721983749");
BigInteger bigB = new BigInteger("1982347983");
BigInteger [] result = bigA.divideAndRemainder(bigB);
System.out.println("商" + result[0] + "余" + result[1]);
}
}
- BigDecimal类涉及到进位的问题,这个类里定义里定义了如下的除法运算:
- 除法计算:public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
import java.math.BigDecimal;
import java.math.RoundingMode;
class MathUtil {
private MathUtil() {}
/**
* @Description: 实现数据的四舍五入操作
* @Param: [num操作参数, scale保留位数]
* @return: double
* @Author: mars_wu
* @Date: 2020/12/17 下午3:21
*/
public static double round(double num, int scale) {
return new BigDecimal(num).divide(BigDecimal.valueOf(1.0), scale, RoundingMode.HALF_UP).doubleValue();
}
}
public class MathApi {
public static void main(String[] args) {
System.out.println(MathUtil.round(19.6352, 2));
}
}