API之Math

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 商的倒数第二位,奇数则四舍五入;偶数则五舍六入
posted @   许多多被注册了  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示