API之Math
基本的运算符并不能满足复杂的数学运算,于是java提供了Math工具类,以满足需求
Math类位于java.lang包,它的构造方法是private的,因此无法创建Math类的对象,并且Math类中的所有方法都是类方法,可以直接通过类名调用。
静态常量
E:值为e,自然对数;Math.E
PI:值为π,圆周率;Math.PI
最大值、最小值、绝对值
-
static type abs(type a );返回a的绝对值
-
static type max(type a ,type b);返回a和b的最大值
-
static type min(type a ,type b);返回a和b的最小值
-
type为int、long、float、double之一
-
求整运算
方法(加粗为返回值类型) | 说明 |
---|---|
static double ceil(double a) | 返回大于等于a的最小整数, |
static double floor(double a) | 返回小于等于a的最大整数, |
static double rint(double a) | 返回最接近a的整数,如果有两个同样接近的整数,则结果取偶数, |
static int round(float a) | 返回最接近a的整数,如果有两个同样接近的整数,取较大的那个, |
static long round(double a) | 返回最接近a的整数,如果有两个同样接近的整数,取较大的那个, |
eg:System.out.println(Math.floor(2.12));//2.0
三角函数运算
方法 | 说明 |
---|---|
static double sin(double a ) | 返回角的正弦值,参数以弧度为单位 |
static double cos(double a ) | 返回角的余弦值,参数以弧度为单位 |
static double tan(double a ) | 返回角的正切值,参数以弧度为单位 |
static double asin(double a ) | 返回一个值的反正弦值,参数域在[-1,1],值域在[-PI/2,PI/2] |
static double acos(double a ) | 返回一个值的反余弦值,参数域在[-1,1],值域在[0.0,PI] |
static double atan(double a ) | 返回一个值的反正切值,值域在[-PI/2,PI/2] |
static double toDegrees(double angrad) | 将用弧度表示的角转换为近似相等的用角度表示的角 |
static double toRadians(double angdeg) | 将用角度表示的角转换为近似相等的用弧度表示的角 |
指数运算
方法 | 说明 |
---|---|
static double exp(double a) | 返回e的a次幂 |
static double pow(double a ,double b) | 返回以a为底,以b为指数的幂值 |
static double sqrt(double a) | 返回a的平方根 |
static double cbrt(double a) | 返回a的立方根 |
static double log(double a) | 返回a的自然对数,即lna的值 |
static double log10(double a) | 返回以10为底a的对数 |
随机数
java中生成指定范围内的随机数字有两种方法:一种是调用Math类的random()方法,一种是使用Random类。
random() 方法只能产生 double 类型的 0~1 的随机数;Random类提供了丰富的随机数生成方法,可以产生boolean、byte、int、long、float、double类型的随机数。
Ranom类位于java.util包,常用的有两个构造方法
-
Ranom():使用一个和当前系统时间对应的数字作为种子数,创建Ranom对象
-
Ranom():使用单个long类型的参数创建一个新的随机数生成器;
方法 | 说明 |
---|---|
int nextInt() | 生成一个随机的int值,[-2^31,2^31-1];如果需要指定区间,需进行数学变换 |
int nextInt(int n) | 生成一个随机的int值,[0,n);如果需要指定区间,需进行数学变换 |
boolean nextBoolean() | 生成一个随机的boolean值,true和false的概率相等 |
long nextLong() | 返回一个随机长整型数字 |
float nextFloat() | 返回一个随机单精度数字 |
double nextDouble() | 返回一个随机双精度值 |
void setSeed(long seed) | 重新设置Ranom对象中的种子数。设置完种子数以后的Ranom对象和相同种子数使用new关键字创建的Ranom对象相同 |
数字格式化
数字的格式在解决实际问题时使用很普遍,这时可以使用DecimalFormat类对结果进行格式化处理。
DecimalFormat是NumberFormat的一个子类,用于格式化十进制数字。包含一个模式和一组符号,常用符号如下:
符号 | 说明 |
---|---|
0 | 显示数字,如果位数不够则补0 |
# | 显示数字,如果位数不够不发生变化 |
. | 小数分隔符 |
- | 减号 |
, | 组分隔符 |
E | 分割科学计数法中的尾数和小数 |
% | 前缀或后缀,乘以100后作为百分比显示 |
? | 乘以1000后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。 |
main{
float i = 4158.45657f;
DecimalFormat df1 = new DecimalFormat("00000.00");
DecimalFormat df2 = new DecimalFormat("0.0");
DecimalFormat df3 = new DecimalFormat("#######.#");
DecimalFormat df4 = new DecimalFormat("#.#####");
System.out.println(df1.format(i));//04158.46
System.out.println(df2.format(i));//4158.5
System.out.println(df3.format(i));//4158.5
System.out.println(df4.format(i));//4158.45654
}
大数字运算
包括BigInteger类和BigDecimal类,用于高精度计算
BigInteger:针对整型大数字的处理
-
为存储、运算比Integer更大的数,Java提供了BigInteger类,它可以准确的表示任何大小的整数值,除基本运算外还封装了很多操作,如绝对值、相反数、最大公约数、判断是否为质数等。
-
要使用BigInteger类,首先要创建一个BigInteger对象。BigInteger类提供了很多构造方法,其中最直接的一种是参数以字符串形式代表要求处理的数字。格式:
BigInteger(String val)
,这里的val是数字十进制的字符串。
方法 | 说明 |
---|---|
add(BigInteger val) | 加 |
subtract(BigInteger val) | 减;返回该对象减去val的值 |
multiply(BigInteger val) | 乘 |
divide(BigInteger val) | 除 |
remainder(BigInteger val) | 取余 |
divideAndRemainder(BigInteger val) | 除,返回数组的第一个值为商,第二个为余数 |
pow(int exponent) | 参数的exponent次方运算 |
negate() | 取相反数 |
shiftLeft(int n) | 将数字左移n位;n为负,则右移 |
shiftRight(int n) | 将数字右移n位;n为负,则左移 |
and(BigInteger val) | 与运算 |
or(BigInteger val) | 或运算 |
compareTo(BigInteger val) | 做数字的比较运算//对象大返回true,val大返回false; |
min(BigInteger val) | 返回较小的数值 |
max(BigInteger val) | 返回较大的数值 |
equals(Object obj) | 当参数obj是BigInteger类的数字并且数值相等时返回true,否则返回false; |
main{
BigDecimal big1 = new BigDecimal("107");
BigDecimal big2 = new BigDecimal("5");
System.out.println("和为:" + big1.add(big2));//和为:112
System.out.println("差为:" + big1.subtract(big2));//差为:102
System.out.println("积为:" + big1.multiply(big2));//积为:535
System.out.println("商为:" + big1.divide(big2));//商为:21.4
System.out.println("余为:" + big1.remainder(big2));//余为:2
System.out.println("幂为:" + big1.pow(2));//2次幂为:11449
System.out.println("相反数为:" + big1.negate());//相反数为:-107
System.out.println("====================================");
System.out.println("左移2位为:" + big1.toBigInteger().shiftLeft(2));//左移2位为:428
System.out.println("右移2位为:" + big1.toBigInteger().shiftRight(2));//右移2位为:26
System.out.println("除取模、余运算为:" + big1.divideAndRemainder(big2)[0]);//除取模、余运算为:21
System.out.println("比较运算为:" + big2.compareTo(big1));//比较运算为:-1
System.out.println("较大为:" + big1.min(big2));//较大为:5
System.out.println("较小为:" + big1.max(big2));//较小为:107
}
BigDecimal:针对大小数的处理
-
BigDecimal类支持任何精度的浮点数,可以用来精确计算货币值;
-
BigDecimal常用的构造方法:
-
BigDecimal(double val):实例化时将双精度转换为BigDecimal类型
-
BigDecimal(String val):实例化时将字符串形式转换为BigDecimal类型
-
-
+、-、*同上,除法:divide(BigDecimal divisor,int scale,int roundingMode):三个参数分别表示除数、商的小数位、近似值处理模式。见下表:
roundingMode模式 | 说明 |
---|---|
BigDecimal.ROUND_UP | 商的最后一位如果大于0,往前进位,无论正负 |
_DOWN | 商的最后一位省略 |
_CEILING | 商为正数,进位;商为负数省略 |
_FLOOR | 商是正数,省略;商为负数进位 |
_HALF_DOWN | 对商进行五舍六入(五舍去) |
_HALF_UP | 对商进行四舍五入(五上位) |
_HALF_EVEN | 商的倒数第二位,奇数则四舍五入;偶数则五舍六入 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本