首页 > 编程知识 正文

基于java的数学函数库(java数据库连接工具类)

时间:2023-05-04 13:30:01 阅读:103555 作者:1321

00-1010在上一篇文章中,我们系统地研究了Java中的包装器类,因此在本文中,让我们了解一下Java提供的class ——的数学相关类。

00-1010当我们第一次学习Java的基本语法结构时,我们实际上学习并理解了加减乘除的算术运算符。有了这些操作符,我们可以做一些简单的操作,但是当我们需要做一些复杂的操作时,处理起来其实是非常困难的(比如获取随机数等)。).事实上,数学对我们来说并不陌生。在学习Java的基础知识时,您一定使用过数学课。这其实是我们接触到的最早的数学课之一。其实还有其他与数学相关的类,比如BigInteger类、BigDecimal类等。下表简要总结了这三个类别:

数学类属于包继承关系数学类java.lang package,默认不需要从Object基类BigInteger类java.math package继承,需要从Number类继承,实现了可序列化、可比较接口BigDecimal类的java.math包,需要从Number类继承,实现了可序列化、可比较接口。

让我们详细研究一下这三个类别。

00-1010其实看源代码,可以看到Math类是final修饰的,这意味着子类不能继承,所以只能用这个类。

公共期末班数学{}

接下来,让我们仔细看看数学课。

00-1010通过查看源代码,我们可以知道Math类的构造方法是私有的,即不能创建对象。我们为什么这样设计,其实是因为Math类中的属性和方法是静态的(静态装饰)。

/**

*不要让任何人实例化这个类。

*/

私人数学(){}

Java工具类——数学相关的类

abs()方法返回给定数字的绝对值。该方法提供了四种具有不同参数类型(int、long、float、double)的重载方法int ABS 1=math。ABS(-1);

long abs2=math . ABS(-3l);

float abs3=math . ABS(-1.2f);

double ABS 4=Math . ABS(-3.923);

system . out . println(abs1);

system . out . println(abs2);

system . out . println(abs3);

system . out . println(abs4);

ceil()方法返回大于或等于参数且等于数学整数的最小双精度值,这可以理解为向上舍入。system . out . println(math . ceil(-1.3));//-1.0

system . out . println(math . ceil(1.9));//2.0

system . out . println(math . ceil(-7.9));//-7.0

system . out . println(math . ceil(123));//123.0

floor()方法返回最大双精度值,该值小于或等于参数并等于一个数学整数,可以理解为向下舍入。system . out . println(math . floor(-1.3));//-2.0

system . out . println(math . floor(1.9));//1.0

system . out . println(math . floor(1.3));//1.0

system . out . println(math . floor(-7.9));//-8.0

system . out . println(math . floor(123));//123.0

round()方法返回最接近参数的整数,舍入到正无穷大,这实际上是一个舍入的整数。system . out . println(math . round(-1.3));//-1

system . out . println(math . round(1.9));//2

system . out . println(math . round(1.3));//1

system . out . println(math . round(-7.9));//-8

system . out . println(math . round(123));//123

max()方法返回最大值,它为四个重载方法提供了不同的参数类型(int、long、float、double)系统。out.println (math.max (1,3));//3

System.out.println(Math.max(-4,-5));//-4

system . out . println(math . max(1.8,1.92));//1.92

system . out . println(math . max(-4f,-4f));//-4.0

min(a,b)方法返回最小值,它提供了四个不同的参数类。

型重载方法(int, long, float, double)System.out.println(Math.min(1, 3));//1 System.out.println(Math.min(-4, -5));//-5 System.out.println(Math.min(1.8, 1.92));//1.8 System.out.println(Math.min(-4f, -4f));//-4.0 pow(a, b)方法返回 a 的 b 次方,其中参数和返回值都是 double 类型的System.out.println(Math.pow(3, 3));//27.0 System.out.println(Math.pow(3.2, 5));//335.5443200000001 random()方法生成一个 double 类型的随机数,范围是[ 0.0, 1.0),注意是左闭右开。System.out.println(Math.random());//0.4128879706448445 System.out.println(Math.random());//0.9024029619163387 System.out.println(Math.random());//0.4265563513755902

三、BigInteger类

我们都知道,在基本数据类型里面,long型的取值范围是最大的,也就是8个字节,取值范围是-2的63次方到正的2的63次方减去1,当然,这个取值范围很大很大,在平时的开发中,我们其中只用到int类型的都基本够了,但是当我们存储的数据的长度超过了 long 型的长度时,我们该怎么存储呢?这时候,BigInteger 类就可以解决我们的问题。

BigInteger 顾名思义,其实就是叫大整数,也就是说只能存储整型的数,我们通过构造方法和常用方法来了解BigInteger 类。

1、构造方法

BigInteger 类有8个构造方法,其中有2个私有构造方法。8个构造方法分别是:

private BigInteger(int[] val){} private BigInteger(int signum, int[] magnitude){} public BigInteger(byte[] val){} public BigInteger(String val){} public BigInteger(String val, int radix) {} public BigInteger(int signum, byte[] magnitude){} public BigInteger(int numBits, Random rnd){} public BigInteger(int bitLength, int certainty, Random rnd){}

2、类中常用的方法

当我们想用这个类做四则运算的时候,是不是也可以直接加减乘除呢,比如下面这张图:

通过上面这张图,BigInteger类直接做四则运算显然是不可以的,因为上面两个数是引用类型,而运算符只能对基本数据类型做运算。那么我们怎么做相应的四则运算呢?其实BigInteger类里面其实已经帮我们实现对应的方法,我们直接用实例化的的对象调用它就行了。比如下方的代码进行加减乘除:

private static void test6() { BigInteger num1 = new BigInteger("1111"); BigInteger num2 = new BigInteger("2222"); //加法 BigInteger add = num1.add(num2); //减法 BigInteger subtract = num2.subtract(num1); //乘法 final BigInteger multiply = num1.multiply(num2); //除法(取整) BigInteger divide = num2.divide(num1); //除法(取余) BigInteger mod = num2.mod(num1); System.out.println(add);//3333 System.out.println(subtract);//1111 System.out.println(multiply);//2468642 System.out.println(divide);//2 System.out.println(mod);//0 }

四、BigDecimal类

与 BigInteger 类对应的是 BigDecimal 类,BigInteger 是处理整数的,而 BigDecimal 是处理小数的,Decimal 英文单词就是小数的意思,所以 BigDecimal 顾名思义就是大小数,处理大的小数的。如果一个小数超过了 double类型的取值范围,就需要用到 BigDecimal。

1、构造方法

BigDecimal 类的构造方法有很多,最常用的是以下四个:

public BigDecimal(double val) { public BigDecimal(int val) {} public BigDecimal(String val) {} public BigDecimal(long val) {}

2、类中常用的方法

和 BigInteger 类一样,BigDecimal 也是不可以直接进行加减乘除的,加减乘除的方式和 BigInteger 处理方式一样,比如下面的代码对BigDecimal 进行四则运算:

private static void test7() { BigDecimal num1 = new BigDecimal("1.23"); BigDecimal num2 = new BigDecimal("2.46"); //加法 BigDecimal add = num1.add(num2); //减法 BigDecimal subtract = num2.subtract(num1); //乘法 final BigDecimal multiply = num1.multiply(num2); //除法(取整) BigDecimal divide = num2.divide(num1); System.out.println(add);//3.69 System.out.println(subtract);//1.23 System.out.println(multiply);//3.0258 System.out.println(divide);//2 }

由于小数和整数不一样,小数经常涉及到精度的问题,所以 BigDecimal 里面也提供了方法来设置小数的精度,设置精度的方法有三个重载的方法:

public BigDecimal setScale(int newScale) public BigDecimal setScale(int newScale, int roundingMode) public BigDecimal setScale(int newScale, RoundingMode roundingMode)

这三个方法的第一个参数是设置保留小数点之后的位数,第二个参数是设置的模式(比如向上取整还是向下取整等等),设置四舍五入的模式有8种:

public final static int ROUND_UP = 0; public final static int ROUND_DOWN = 1; public final static int ROUND_CEILING = 2; public final static int ROUND_FLOOR = 3; public final static int ROUND_HALF_UP = 4; public final static int ROUND_HALF_DOWN = 5; public final static int ROUND_HALF_EVEN = 6; public final static int ROUND_UNNECESSARY = 7;

下面我们就来对这其中4种模式的用法做一个详细的分析

ROUND_UP 模式

UP的意思就是向上的意思,可以理解为加的意思。比如我保留了三位小数,那么我不管你后面的小数值如何(除了0),我都给你加一,就相当于四舍五入的五入。比如下面这个代码,我保留3为小数,模式设置为ROUND_UP模式,那么如果最后一位是0,那么结果就是9.461,否则就是9.462

BigDecimal bigDecimal = new BigDecimal("9.4610"); BigDecimal result = bigDecimal.setScale(3, BigDecimal.ROUND_UP); ROUND_DOWN 模式

是一个舍位取值的概念,比如我保留了三位小数,那么我不管你后面的小数值如何,也不会四舍五入,就硬生生的的截断,相当于什么呢,就是我从小数点后面开始取三位,三位后面的都不要了。比如下面这个代码,我保留3为小数,模式设置为ROUND_DOWN模式,那么最后一位不管是什么(从0到9),最后的结果都是9.461

BigDecimal bigDecimal = new BigDecimal("9.4611"); BigDecimal result = bigDecimal.setScale(3, BigDecimal.ROUND_DOWN); ROUND_CEILING 模式

这个模式就是给定的数如果为正数,行为和ROUND_UP一样,如果为负数,行为和ROUND_DOWN一样 。

ROUND_FLOOR 模式

这个模式就是给定的数如果为正数,行为和ROUND_DOWN一样,如果为负数,行为和ROUND_UP一样

五、小结

以上就是我对数学相关类的总结以及个人的理解,如果有任何不清楚的,可以去看官方文档(API官方文档地址:https://docs.oracle.com/javase/8/docs/api/),其实,很多人都很排斥看源码和阅读官网文档,原因就是源码和阅读官网文档都是全英文的,解读起来很费时间;其实这是一种不好的学习方式,源码和阅读官网文档是最官方权威的第一手资料,也是最正确的,如果我们去网上看其他的相关解读,这也只能是他人的解读,而其他人的解读就代表了他对源码和阅读官网文档的个人理解,而这个理解是可能会有出入的,也就是可能会误导我们,所以我们一定要养成习惯去阅读源码和阅读官网文档,可能刚开始的确很慢,但是慢慢的就你的阅读速度和效率就会提高的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。