目录
🐶第一章 Math类
1.1 概述
java.lang.Math
类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。
1.2 常用方法
方法名 方法名 | 说明 | 补充 |
public static int abs(int a) | 返回参数的绝对值 | |
public static double ceil(double a) | 返回大于或等于参数的最小double值,等于一个整数 | ceil(天花板),向上取整 -1.5向上取整为-1 |
public static double floor(double a) | 返回小于或等于参数的最大double值,等于一个整数 | floor(地板),向下取整 -1.5向下取整为-2 |
public static int round(float a) | 按照四舍五入返回最接近参数的int | round(-1.5)=-1 |
🧀实例1(向上取整)
package Day1109;
public class TestDemo01 {
public static void main(Stringargs) {
doubleTest_Data= {1,1.3,1.6,0,-1,-1.3,-1.6};
for (int i = 0; i < Test_Data.length; i++) {
System.out.println(Test_Data[i]+"的Math.ceil结果为:"+Math.ceil(Test_Data[i]));
}
}
}
结果:
🧀实例2(向下取整)
package day1211;
public class testDemo03 {
public static void main(String[] args) {
double[] Test_Data= {1,1.3,1.5,1.6,0,-1,-1.3,-1.5,-1.6};
for (int i = 0; i < Test_Data.length; i++) {
System.out.println(Test_Data[i]+"的Math.floor结果为:"+Math.floor(Test_Data[i]));
}
}
}
结果
🧀实例3(四舍五入)
package day1211;
public class testDemo03 {
public static void main(String[] args) {
double[] Test_Data= {1,1.3,1.5,1.6,0,-1,-1.3,-1.5,-1.6};
for (int i = 0; i < Test_Data.length; i++) {
System.out.println(Test_Data[i]+"的Math.round结果为:"+Math.round(Test_Data[i]));
}
}
}
结果:
❓面试题:为啥Math.round(-1.5)=-1?
四舍五入的算法:Math.floor(a+0.5) 加0.5然后向下取整
-1.5+0.5=-1,向下取整,所以还是-1
-1.6+0.5=-1.1,向下取整,所以是-2
🐶第二章 BigInteger类
在Java中经常会遇到比较大的数,甚至超过了long型,那么该如何处理这些"大数据"呢?
有两个类BigInteger和BigDecimal分别表示大整数型和大浮点型类。从原则上是可以表示”天文单位“一样大的数字,缺点是比较费内存
2.1 概述
java.math.BigInteger
类,不可变的任意精度的整数。如果运算中,数据的范围超过了long类型后,可以使用BigInteger类实现,该类的计算整数是不限制长度的。
2.2 构造方法
BigInteger(String value) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。超过long类型的范围,已经不能称为数字了,因此构造方法中采用字符串的形式来表示超大整数,将超大整数封装成BigInteger对象。
2.3 常用方法
基本整型:
整型(byte,short,int,long)、字符型(char)、布尔型(boolean)、浮点型(float,double)
方法名 | 含义 |
BigInteger.valueOf(Obj) | 将括号内的参数Obj转换成BigInteger数据类型 |
abs() | 取绝对值 |
negate() | 取相反数 |
add(BigInteger value) | 返回其值为 |
subtract(BigInteger value) | 返回其值为 |
multiply(BigInteger value) | 返回其值为 |
divide(BigInteger value) | 返回其值为 |
compareTo() | 用来比较两个数大小,返回一个int型数据(1 大于,0等于,-1小于) |
a.max(b) | 返回大的那个数,类型为BigInteger |
a.min(b) | 返回小的那个数,类型为BigInteger |
🧀实例1
package day1020;
import java.math.BigInteger;
public class DemoTest04 {
public static void main(String[] args) {
int A=42;
BigInteger f=BigInteger.valueOf(A);
System.out.println("f="+f);//输出的f将会等于BigInteger型的42
BigInteger f2=new BigInteger("-9");
System.out.println("f2="+f2.abs());//9
BigInteger f3=new BigInteger("9");
System.out.println("f3="+f3.negate());//-9
}
}
🧀实例2
public static void main(String[] args){
BigInteger big1 = new BigInteger("987654321123456789000");
BigInteger big2 = new BigInteger("123456789987654321");
//加法运算
BigInteger add = big1.add(big2);
System.out.println("求和:"+add);
//减法运算
BigInteger sub = big1.subtract(big2);
System.out.println("求差:"+sub);
//乘法运算
BigInteger mul = big1.multiply(big2);
System.out.println("乘积:"+mul);
//除法运算
BigInteger div = big1.divide(big2);
System.out.println("除法:"+div);
}
🧀实例3
package day1020;
import java.math.BigInteger;
public class DemoTest04 {
public static void main(Stringargs) {
BigInteger bigNum1=new BigInteger("52");
BigInteger bigNum2=new BigInteger("27");
//1.compareTo():返回一个int型数据(1大于,0等于,-1小于)
int num=bigNum1.compareTo(bigNum2);
System.out.println(num);//1
//2.max():直接返回大的那个数,类型为BigInteger
//原理:return(compareTo(val)<0?this:val);
BigInteger compareMax=bigNum1.max(bigNum2);
System.out.println(compareMax);//52
//3.min():直接返回小的那个数,类型
BigInteger compareMin=bigNum1.min(bigNum2);
System.out.println(compareMin);//27
}
}
2.4 BigInteger的读入方法
nextBigInteger(), 从控制台读入一个BigInteger型数据,类似于读入int型的nextInt();
package Day1108;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class BidDecimal01 {
public static void main(Stringargs) {
Scanner sc=new Scanner(System.in);//读入
System.out.println("请输入一个整数");
BigInteger bi=sc.nextBigInteger();//读入一个Integer
System.out.println("bi="+bi);
}
}
结果
2.5 BigInteger的构造方法
默认的是十进制,也就是我们平常较为常见的
package day1204;
import java.math.BigInteger;
public class testDemo01 {
public static void main(String[] args) {
BigInteger d=new BigInteger("48");
System.out.println(d);
}
}
结果:
支持自定义进制类型(已存在的),例如二进制,四进制,八进制,十六进制,如下:
package day1204;
import java.math.BigInteger;
public class testDemo01 {
public static void main(String[] args) {
BigInteger d=new BigInteger("48");
System.out.println(d);
String str="1011100111";
int radix=2;//2代表二进制,为下一行代码中的参数radix赋值
BigInteger num1=new BigInteger(str,radix);
System.out.println(num1);
}
}
结果:
❓Leetcode练习题
代码
import java.math.BigInteger;
class Solution {
public int[] plusOne(int[] digits) {
//1.数组转整数
BigInteger sum = new BigInteger("0");
for (int i = 0; i < digits.length; i++) {
sum = sum.multiply(BigInteger.valueOf(10)).add(BigInteger.valueOf(digits[i]));
}
// 2.整数+1
sum = sum.add(BigInteger.valueOf(1));
//3.整数转为字符串
String str = sum.toString();
//4.字符串转为字节数组
String[] array = str.split("");
int[] nums = new int[array.length];
for (int i = 0; i < array.length; i++) {
nums[i] = Integer.parseInt(array[i]);
}
return nums;
}
}
🐶第三章 BigDecimal类
3.1 概述
java.math.BigDecimal
类,不可变的、任意精度的有符号十进制数。该类可以实现超大浮点数据的精确运算。
3.2 构造方法
BigDecimal(String value)将 BigDecimal的十进制字符串表示形式转换为 BigDecimal。
3.3 常用方法
BigDecimal类的加法减法乘法与BigInteger类相同,不在重复。
3.4 除法计算
BigDecimal类实现精确的浮点数除法运算,如果两个浮点除法计算后是无限循环,那么就会抛出异常。
除法运算方法:
-
BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
-
divesor:此 BigDecimal 要除以的值。
-
scale:保留的位数
-
roundingMode:舍入方式
-
-
舍入方式:BigDecimal类提供静态的成员变量来表示舍入的方式
-
BigDecimal.ROUND_UP 向上加1。
-
BigDecimal.ROUND_DOWN 直接舍去。
-
BigDecimal.ROUND_HALF_UP 四舍五入。
-
public static void main(String[] args){
BigDecimal big1 = new BigDecimal("0.05");
BigDecimal big2 = new BigDecimal("0.01");
//加法计算
BigDecimal add = big1.add(big2);
System.out.println("求和:"+add);
//减法计算
BigDecimal sub = big1.subtract(big2);
System.out.println("求差:"+sub);
//乘法计算
BigDecimal mul = big1.multiply(big2);
System.out.println("乘法:"+mul);
//除法计算
BigDecimal div = big1.divide(big2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(div);
}