文章目录
大数类
前言
基本数据类型的可存储长度的局限——数据溢出,为解决这而生。
被前辈们放置在包 java.math.*
大数类已经不考虑长度的问题,故而缩少了类似于 int 或 double 系列的变体(long,short,float)等。只有 整数大数 和 浮点大数 二种。
且基本运算不能类混合,即 整数大数 和 浮点大数 不能混合运算。
其基本运算介于是接口或类的实现,使用其API进行。
BigInteger 和 BigDecimal
- 创建 与 赋值
BigInteger a;
a = BigInteger.valueOf(123456789101112L); //大于int范围的要加L
//或
BigInteger a = new BigInteger("123456789101112131415");
- 加减乘除 与 取余
BigInteger a.add(BigInteger b);
BigDecimal a.add(BigDecimal b);
BigInteger a.subtract(BigInteger b);
BigDecimal a.sbutract(BigDecimal b);
BigInteger a.multiply(BigInteger b);
BigDecimal a.multiply(BigDecimal b);
BigInteger a.divide(BigInteger b);
BigDecimal a.divide(BigDecimal b);
BigInteger a.mod(BigInteger b);
- 求 最大公因数
BigInteger a.gcd(BigInteger b);
- 最值 与 (A^B)%MOD
BigInteger a.max(BigInteger b);
BigInteger a.min(BigInteger b);
//浮点大数可类比
BigInteger q .modPow(BigInteger b , BigInteger c);
- 比较大小 与 进制转化 与 类型转化
BigInteger a.compareTo(BigInteger b);
BigDecimal a.compareTo(BigDecimal b);
//其返回值非true或false而是1,-1,0
//使用构造函数BigInteger(String, int index);可以把一个index进制的字符串,转化为10进制的BigInteger;
//引用他人
BigInteger a = new BigInteger("111110", 2);把111110变为10进制赋值给a
System.out.println(a.toString(16));把a转化为16进制的字符串输出
BigInteger a.toBigDecimal() //把BigInteger 转化为 BigDecimal
BigDecimal a.toBigInteger() //把BigDecimal 转化为 BigInteger
-
BigDecimal的精度问题
ROUND_DOWN 向零舍入。 即1.55 变为 1.5 , -1.55 变为-1.5
ROUND_CEILING 向正无穷舍入. 即 1.55 变为 1.6 , -1.55 变为 -1.5
ROUND_FLOOR 向负无穷舍入. 即 1.55 变为 1.5 , -1.55 变为 -1.6
ROUND_HALF_UP 四舍五入 即1.55 变为1.6, -1.55变为-1.6
ROUND_HALF_DOWN 五舍六入 即 1.55 变为 1.5, -1.5变为-1.5
ROUND_HALF_EVEN 如果舍入前一位的数字为偶数,则采用HALF_DOWN奇数则采用HALF_UP 如1.55 采用HALF_UP 1.45采用HALF_DOWN
ROUND_UP 向远离0的方向舍入 即 1.55 变为 1.6 , -1.55 变为-1.6
ROUND_UNNECESSARY 有精确的位数时,不需要舍入 -
保留n位小数
import java.math.*;
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args){
BigDecimal a = new BigDecimal("1.10218");
a = a.setScale(4,BigDecimal.ROUND_HALF_UP);//四舍五入保留四位小数
System.out.println(a);
}
}
Math类
最值,平方根,绝对值
- 最值
public class Main{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println(Math.min(a, b));
System.out.println(Math.max(a, b));
}
}
/*————————————————
版权声明:本文为CSDN博主「Androids_lost_Sheep」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GD_ONE/article/details/104032835*/
- 平方根
Math.sqrt(double a)
//返回正确舍入的 double 值的正平方根。
- 绝对值
public class Main{
public static void main(String[] args){
int a = -10;
System.out.println(Math.abs(a));
}
}
求幂,取整
- 求幂
Math.pow(double a, double b)
//注意无论是传入int还是long都会返回一个double类型的数。
- 取整
①Math.ceil(double x):向上(右侧靠近)取整,返回大于该值的最近 double 值
System.out.println(Math.ceil(1.4)); // 2.0
System.out.println(Math.ceil(-1.6)); // -1.0
②Math.floor(double x):向下(左侧靠近)取整,返回小于该值的最近 double 值
System.out.println(Math.floor(1.6)); // 1.0
System.out.println(Math.floor(-1.6)); // -2.0
③Math.round(double x):算术四舍五入取整
随机数获取
- Math.random():生成一个[0,1)之间的double类型的伪随机数
- 所以为了得到一个[1, b] 之间的整数可以这样做:
int a = (int)(Math.random()*b + 1);
// [1, b]
- 如果要得到[a, b]的一个整数则是:
int a = (int)(Math.random()*(b - a + 1) + a)
// + 1 是因为random()最大取不到1,所以上限取整后就会少1.
三角函数
Math.cos(double a) 余弦
Math.acos(double a) 反余弦
Math.sin(double a) 正弦值
Math.asin(double a) 反正弦值
Math.tan(double a) 正切值
Math.atan(double a) 反正切
String 、StringBuilder、StringBuffer常用方法和区别
简单叙述
String 和 StringBuilder 和 StringBuffer 都不是类似于与基本数据类型(int 和 double)这样的已经设置好的。而是继承或实现某个类的一种数据类型,他们有各自类中的内部API。
String
- 遍历
String 的遍历一般就二种,一种是使用 API 中的 charAt 中的方法,另一种则是 toCharArray 方法新形成一个字符数组。
总体思想都是 先看待为字符组合,然后依次查询操作。 - 比较
简单来说只有 compareTo 和 equals 二种方法,当然在它们的基础上还各自扩充了 compareToIgnoreCase 和 equalsIgnoreCase 来忽视字符串中的大小写差异。
– compareTo方法返回的是数字(以0为界),而equals则是返回布尔值。 - 搜索子字符串
indexOf(int ch); // 返回指定字符在此字符串中第一次出现的索引
indexOf(int ch, int fromindex); // 同上, 从指定索引开始搜索
indexOf(String str); //返回子串在此字符串中第一次出现的索引
indexOf(String str, int fromindex); //同上,从指定索引开始搜索
lastIndexOf(int ch); //返回指定字符在此字符串最后一次出现的索引
lastIndexOf(int ch, int fromindex); //同上, 从指定索引开始搜索
lastIndexOf(String str); //返回子串在此字符串最后一次出现的索引
lastIndexOf(String str, int fromindex); //同上, 从指定索引开始搜索
startsWith(String prefix); // 检查是否以某一前缀开始
- 字符串拆分
split(String regex); - 提取子字符串
substring(int beginIndex, int endIndex); - 子串替换
replaceAll(String s1,String s2);
replaceFirst(String s1,String s2); - 转换大小写
toUpperCase();
toLowerCase(); - 将其他类型的数据转化为字符串
valueOf(char[] data);
valueOf(char[] data,int offset, int count)
valueOf(int i);
StringBulider(长度可变)
- 构造声明
StringBuilder s = new StringBuilder();
StringBuilder s1 = new StringBuilder("abc");
- 遍历
使用API中的charAt即可。 - 增删改查
①增加
append(String str); //在此字符串追加str。
append(StringBuilder str); //在此字符串追加str。
append(char[] str, int offset, int len); //将char的子数组追加到此字符串
②删除
delete(int start, int end); //移除此序列从start到end-1的字符串
deleteCharAt(int index); //移除指定索引上的char
③修改
setCharAt(int index, char ch); //将指定索引处的字符替换为ch
④查找
indexOf(String str); //返回子字符串第一次出现的索引
indexOf(String str, int fromIndex); //同上,从指定位置查找
lastIndexOf(String str); //返回子字符串最后一次出现的索引
lastIndexOf(String str, int fromIndex); //同上,从指定位置查找
- 截取
substring(int start); //返回此字符串从start开始至length-1结束的String
substring(int start, int end); //返回此字符串从start开始至end-1结束的String
toString(); //返回此序列中的String表示形式。
//(注意以上方法的返回值都是String而不是StringBuilder)
- 反转
reverse(); //将此字符串反转
Calendar类
常用的日历字段
YEAR 指示年的 get 和 set 的字段数字。
MONTH 指示月份的 get 和 set 的字段数字。
DAY_OF_MONTH get 和 set 的字段数字, 指示一个月中的某天。
DAY_OF_WEEK get 和 set 的字段数字, 指示一个星期中的某天。
DAY_OF_YEAR get 和 set 的字段数字, 指示当前年中的天数。
DAY_OF_WEEK_IN_MONTH get 和 set的字段数字, 指示当前月中的第几个星期。
HOUR get 和 set 的字段数字,指示当天中的某小时
MINUTE get 和 set的字段数字,指示当前小时中的某分钟
SECOND get 和 set 的字段数字,指示当前分钟中的某秒 time
以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。
使用
- 实例化
Calendar calendar = Calendar.getInstance();//赋值给calendar
- 获取信息
– 获取当前Calender实例的字段信息
get(int field);// 获取给定字段的值
- 注意
MONTH 字段是从0月开始计数的,所以12月对应的值是11。
DAY_OF_WEEK 中星期天对应的是1,星期一对应的是2,星期六对应的是7,
而YEAR和DAY_OF_MONTH都是从1开始计数
`