Java中与数学相关的类(Math,Random,UUID,BigInteger,BigDecima,DecimalFormat)

Math类

所属的包:

java.lang

继承关系:

除默认继承java.lang.Object类外,无其它任何继承关系。

使用方式:

Math构造方法是私有的 我们不能直接调用构造方法创建对象。但由于Math中提供的属性及方法都是static修饰的,不需要创建对象

常用方法:

Math类下方法参数返回值特征作用
abs()int,long,float,doubleint,long,float,double静态返回给定数字的绝对值
ceil()doubledouble静态向上取整
floor()doubledouble静态向下取整
rint()doubledouble静态取临近的整数,如果两边距离一样,则返回偶数
round()double,floatlong,int静态四舍五入
max()(int,int),(long,long),(float,float),(double,double)int,long,float,double静态取最大值
min()(int,int),(long,long),(float,float),(double,double)int,long,float,double静态取最小值
pow()doubledouble静态求a的b次方
sqrt()doubledouble静态求开平方根
random()double静态随机产生一个数 [0.0–1.0)
sin()doubledouble静态求夹角的正弦值
cos()doubledouble静态求夹角的余弦值
tan()doubledouble静态求夹角的正切值

另附常用的三角函数值参照表:

三角函数 0 o 0^{o} 0o 3 0 o 30^{o} 30o 4 5 o 45^{o} 45o 6 0 o 60^{o} 60o 9 0 o 90^{o} 90o
sin α0 1 2 \frac{1}{2} 21 2 2 \frac{\sqrt{2}}{2} 22 3 2 \frac{\sqrt{3}}{2} 23 1
cos1 3 2 \frac{\sqrt{3}}{2} 23 2 2 \frac{\sqrt{2}}{2} 22 1 2 \frac{1}{2} 210
tan0 3 3 \frac{\sqrt{3}}{3} 33 1 3 \sqrt{3} 3

Math.random()的小问题

使用Math.random()产生随机小数的时候精确程度可能有些损失。例如:
要产生一个[5—100)之间的随机数。
我们通常的做法是:

double v = Math.random()*95+5;

Math.random()的取值范围为[0,1),取不到1,我们假设极端情况下,它取最大值0.999,这样一来,0.999乘以95的结果为94.905。也就是说,它的精确度会随着它乘以某个整数而下降。我们可以利用另一个工具类Random来更好得产生随机数。

Random类

所属的包:

java.util包,需要import导入。

继承关系:

除默认继承java.lang.Object类外,无其它任何继承关系。

使用方式:

Random类下没有静态方法,使用它之前必须创建对象。

Random r = new Random();

常用方法:

Random类中常用方法的调用作用
r.nextInt();随机产生 int取值范围(-2147483648~+2147483647)的整数 有正有负
r.nextInt(int bound);随机产生一个 [0–bound) 整数 ,注意bound必须为正数 否则会出现如下的运行时异常IllegalArgumentException
r.nextFloat()随机产生一个 [0.0—1.0)之间的浮点数
r.nextBoolean()随机产生一个boolean值 true false

UUID类

所属的包:

java.util包,需要import导入。

继承关系:

除默认继承java.lang.Object类外,无其它任何继承关系。

使用方式:

有构造方法,但没有无参构造方法。我们通常不去创建对象。

常用方法:

常用方法就一个:randomUUID()
这里说两个吧。

UUID类中常用方法作用
randomUUID()利用UUID的静态工厂伪随机生成一串UUID类型的32位16进制数
timestamp()获取与此UUID关联的时间戳值,返回值为long类型
UUID id = UUID.randomUUID();
System.out.println(id);//随机生成 9ae321b5-54dd-4111-8bdf-0eff93184b59

BigInteger类

它通俗来讲就是一个存储大整数的类。当long类型存储不下,用它最合适。它的底层是利用了数组的动态扩容来存储大整数。

所属的包:

java.math包,需要import导入。

继承关系:

直接继承java.lang.Number类。

使用方式:

提供的构造方法全部都是带参数的,我们通常利用带String参数的构造方法创建这个类的对象。

BigInteger  bi = new BigInteger("123");	

常用方法:

做四则运算的四个方法:
add()      subtract()      multiply()       divide()
这四个方法的参数和返回值都是BigInteger类型。

BigInteger类的小例子

求阶乘的时候,由于阶乘运算的结果太大,我们的BigInteger类就可以派上用场了。
设计一个方法 用来计算给定数字的阶乘:

//设计一个方法  用来计算给定数字的阶乘
    public BigInteger factorial(int num){
        BigInteger result = new BigInteger("1");
        for(int i=1;i<=num;i++){
            result = result.multiply(new BigInteger(i+""));
        }
        return result;
    }
    public static void main(String[] args) {
        TestMath tm = new TestMath();
        System.out.println(tm.factorial(100));
    }

100的阶乘终于算出来了,emmmm

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Process finished with exit code 0

BigDecima类

float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。正式场合应该使用BigDecimal。

因为十进制的16.67本身就是无法用二进制精确表示的,也就说无论你的精度是多少位,都无法用二进制来精确表示16.67,所以对于double数字只能接近表示,这就是二进制计算机的缺点,就如同十进制也也无法表示1/3,1/6一样。如果用这个double来初始化bigDecimal的话就会出现同样的问题。

所属的包:

java.math包,需要import导入。

继承关系:

直接继承java.lang.Number类。

使用方式:

通常建议使用带有String参数的构造方法创建这个类的对象。
BigDecimal的构造函数public BigDecimal(double val)会损失了double 参数的精度。jdk中已经明确不建议使用new BigDecimal(double value)这种形式的构造函数,而是使用new BigDecimal(String value) 或BigDecimal.valueof( double value)。

常用方法:

做四则运算的四个方法:
add()      subtract()      multiply()       divide()
这四个方法的参数和返回值都是BigDecima类型。另外这四个方法还有许多重载方法,这里不再说明。
除此之外还有一个常用方法:setScale()
举例:
对象.setScale(2,BigDecimal.ROUND_DOWN);
两个参数前面是保留小数点之后的位数 后面参数是设置的模式

  BigDecimal bd = new BigDecimal(8.6893);
  bd = bd.setScale(2,BigDecimal.ROUND_DOWN);
  System.out.println(bd);//结果为:8.68

BigDecimal类中的常量ROUND_DOWN代表向下取整。

DecimalFormat类

所属的包:

java.text包,这个包通常用来格式化数据,需要import导入。

继承关系:

直接继承java.text.Format类

使用方式:

通过带String参数的构造方法创建一个格式化对象。构造对象时使用0#来控制格式化的模式(参数为pattern对象),0代表该位数字必须保留,#代表该位数字可有可无。

常用方法:

format():将一个小数格式化成一个字符串。
举例:

 DecimalFormat df = new DecimalFormat("000.###");
 String value = df.format(12.4586);
 System.out.println(value);//012.459
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值