38-Clase de operación digital

Operación digital

  Un programa es un procesamiento matemático, por lo que Java también proporciona el correspondiente soporte de biblioteca de procesamiento digital.

Matemáticas Clase de cálculo matemático

  La función principal de la clase de matemáticas es realizar cálculos matemáticos y proporcionar operaciones básicas de fórmulas de cálculo. El método de construcción de esta clase está privatizado y todos los métodos proporcionados en esta clase son métodos estáticos, es decir, estos métodos se pueden pasarLlamada directa de nombre de clase

  • Math.abs (a);
  • Math.max (a, b);
  • Math.log (a);
  • Math.round (a);
  • Math.pow (a, b);

 & emsp Aunque hay un método de procesamiento de redondeo proporcionado en Matemáticas, este redondeo llevará a cabo directamente todos los dígitos después del punto decimal al procesar, por lo que ahora la forma más conveniente es implementarReserva de dígitos especificados.
Redondeo personalizado

class MathUtil{
    
    
	private MathUtil() {
    
    }
	/**
	 * 实现数据四舍五入,
	 * @param num 操作数
	 * @param scale 四舍五入保留的小数位数
	 * @return 处理后的结果
	 */
	public static double round(double num, int scale) {
    
    
		return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
	}
}

public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(MathUtil.round(19.86273, 2));
	}
}

  Todas las fórmulas matemáticas básicas proporcionadas en Math se pueden integrar si es necesario.

Clase de generación de números aleatorios aleatorios

  La función principal de la clase java.util.Random es generar números aleatorios. Esta clase se basa principalmente en métodos internos para completar:

  • Genere un número entero positivo aleatorio no mayor que el límite:public int nextInt(int bound);

Demostración de lotería

import java.util.Arrays;
import java.util.Random;

public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		int data [] = new int [7];
		Random rand = new Random();
		int foot = 0;		//操作脚标
		while(foot < 7) {
    
    		//选择7个数字
			int num = rand.nextInt(37);		//生成一个不大于37的正整数
			if(isUse(num, data)) {
    
    		//改数字可以使用
				data[foot++] = num;
			}
		}
		Arrays.sort(data);
		for(int x=0;x<data.length;x++) {
    
    
			System.out.print(data[x]+"、");
		}
	}
	/**
	 * 判断传入数字是否为0以及是否在数组中存在
	 * @param num 传入数字
	 * @param temp 已经存在的数据
	 * @return 
	 */
	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;
	}
}

Gran procesamiento digital

  En el proceso de cálculos matemáticos, la clase de procesamiento de números grandes puede realizar el cálculo de números masivos (solo se pueden proporcionar cálculos básicos). Suponiendo que un número excede el rango Doble, no existe ningún tipo de datos que pueda guardar este tipo de contenido. Como mínimo, solo se puede guardar mediante String, que es muy difícil de desarrollar.Para resolver este problema, se proporcionan dos clases de operación de números grandes: BigInteger y BigDecimal; los métodos de construcción de dos clases de procesamiento de números grandes:
rthgR1.png

  • BigInteger:public BigInteger(String val);
  • BigDecimal:public BigDecimal(String val);
public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		BigInteger bigA  = new BigInteger("2345345654885795785467");
		BigInteger bigB  = new BigInteger("23453465488577");
		System.out.println(bigA.add(bigB));
		System.out.println(bigA.subtract(bigB));
		System.out.println(bigA.divide(bigB));
		System.out.println(bigA.multiply(bigB));
	}	
}

Cabe señalar que, aunque se proporcionan un gran número de operaciones, las cuestiones de rendimiento deben tenerse en cuenta en la operación general.
  Dado que es imposible dividir uniformemente en una división matemática, puede simplificarlo y usar otros cálculos de división para encontrar el resto:

  • Encuentre el resto: el public BigInteger[] divideAndReainder(BigInteger val);primer elemento de la matriz es el cociente y el segundo elemento es el resto
public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		BigInteger bigA  = new BigInteger("2345345654885795785467");
		BigInteger bigB  = new BigInteger("23453465488577");
		BigInteger result [] = bigA.divideAndRemainder(bigB);
		System.out.println("商"+result[0] +"、余数"+result[1]);
	}	
}

Si el cálculo no excede el número de dígitos contenidos en el tipo de datos básico al realizar cálculos durante el desarrollo, no se recomienda utilizar números grandes, porque el rendimiento del cálculo es muy bajo.
  El formulario de operación BigDecimal es muy similar a BigInteger, y ambos tienen soporte matemático básico;
use BigDecimal para calcular

public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		BigDecimal bigA  = new BigDecimal("2345345654885795785467");
		BigDecimal bigB  = new BigDecimal("23453465488577");
		System.out.println(bigA.add(bigB));
		System.out.println(bigA.subtract(bigB));
		BigDecimal result [] = bigA.divideAndRemainder(bigB);
		System.out.println("商"+result[0] +"、余数"+result[1]);
	}	
}

Existe un problema de transporte de datos cuando se utiliza BigDecimal. Los siguientes cálculos de división se definen en esta clase:

  • división:public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode);

Utilice BigDecimal para implementar el procesamiento de redondeo

package per.lyz.BasicClass_study;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.Random;

class MathUtil{
    
    
	private MathUtil() {
    
    
	}
	/**
	 * 实现数据四舍五入,
	 * @param num 操作数
	 * @param scale 四舍五入保留的小数位数
	 * @return 处理后的结果
	 */
	public static double round_1(double num,int scale) {
    
    
		return new BigDecimal(num).divide(new BigDecimal(1.0), scale, RoundingMode.HALF_UP).doubleValue();
	}
}

public class MathStudy {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(MathUtil.round_1(19.56777, 2));
	}
}

El procesamiento matemático utiliza tipos de datos básicos, por lo queEl rendimiento debe ser superior aGran clase de procesamiento digital.

Supongo que te gusta

Origin blog.csdn.net/MARVEL_3000/article/details/111567622
Recomendado
Clasificación