JAVA基础编程

您所在的位置:网站首页 和与合的区别是什么 JAVA基础编程

JAVA基础编程

2023-06-02 21:24| 来源: 网络整理| 查看: 265

数字处理

JAVA中提供了java.lang.Math类以供进行数学计算,同时为了进行大数字的操作,JAVA还提供了java.math包专门负责大数字的操作。

Math类

Math类是一个专门进行数字计算的操作类,其提供了数学计算方法,同时Math类中提供的一切方法都是static类型的,这意味着这些数学操作可以通过类名直接进行调用。

public class Demo { public static void main(String[] args) throws Exception { System.out.println(Math.round(15.5)); System.out.println(Math.log(2)); System.out.println(Math.abs(-10)); System.out.println(Math.pow(10,2)); } }

执行结果为:

16 0.6931471805599453 10 100.0 Random类

在开发中还会用到随机数,JAVA中提供了java.util.Random来产生随机数:

import java.util.Random; public class Demo { public static void main(String[] args) throws Exception { Random r = new Random(); System.out.println(r.nextInt(100)); r.setSeed(100); System.out.println(r.nextInt(100)); r.setSeed(100); System.out.println(r.nextInt(100)); } }

执行结果为:

5 15 15

上边的结果创建了一个随机数对象,并使用setSeed设置随机数种子,并使用nextInt生成int型的随机数。

大数字操作类

在一些大数字的运算中,如果该数字已经超过整数或者浮点数的操作极限,那么就只能使用字符串来表示。JAVA中针对这种情况提供了java.math.BigInteger和java.math.BigDecimal,这两个类都属于Number的子类。

首先看一下BigInteger的相关操作,该类可以操作无限大的整数数据。

import java.math.BigInteger; public class Demo { public static void main(String[] args) throws Exception { System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MAX_VALUE * Double.MAX_VALUE); BigInteger a = new BigInteger(String.valueOf(Integer.MAX_VALUE)); BigInteger b = new BigInteger(String.valueOf(Integer.MAX_VALUE)); System.out.println(a.add(b)); System.out.println(a.subtract(b)); System.out.println(a.multiply(b)); System.out.println(a.divide(b)); } }

执行结果为:

2147483647 Infinity 4294967294 0 4611686014132420609 1

从上边的可以看出,使用BigInteger确实可以实现大数字的数学运算。具体方法的定义可查相关文档。

再看一下BigDecimal的相关操作,该类和BigInteger具有基本相同的计算方式,而在实际开发中,使用该类最方便的操作就是进行准确位数的四舍五入计算。

import java.math.BigDecimal; public class Demo { public static void main(String[] args) throws Exception { BigDecimal a = new BigDecimal(10); System.out.println(a.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP).doubleValue()); System.out.println(a.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_DOWN).doubleValue()); System.out.println(a.divide(new BigDecimal(3),0,BigDecimal.ROUND_HALF_UP).doubleValue()); System.out.println(a.divide(new BigDecimal(3),0,BigDecimal.ROUND_HALF_DOWN).doubleValue()); System.out.println(a.divide(new BigDecimal(3),0,BigDecimal.ROUND_CEILING).doubleValue()); System.out.println(a.divide(new BigDecimal(3),0,BigDecimal.ROUND_FLOOR).doubleValue()); } }

执行结果为:

3.33 3.33 3.0 3.0 4.0 3.0

这里主要看一下divide方法:

@Deprecated(since="9") public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode) /* Deprecated. The method divide(BigDecimal, int, RoundingMode) should be used in preference to this legacy method. Returns a BigDecimal whose value is (this / divisor), and whose scale is as specified. If rounding must be performed to generate a result with the specified scale, the specified rounding mode is applied. Parameters: divisor - value by which this BigDecimal is to be divided. scale - scale of the BigDecimal quotient to be returned. roundingMode - rounding mode to apply. */

参数解释也是比较好懂的,其它方法可查相关文档,这里不赘述。

日期操作 Date类

JAVA中日期的表示可以使用java.util.Date来表示:

import java.util.Date; public class Demo { public static void main(String[] args) throws Exception { Date d = new Date(); System.out.println(d); System.out.println(d.getTime()); Date dc = new Date(d.getTime()); System.out.println(dc); Date tmp = new Date(0); System.out.println(tmp); } }

执行结果为:

Sun May 29 16:40:06 CST 2022 1653813606658 Sun May 29 16:40:06 CST 2022 Thu Jan 01 08:00:00 CST 1970

上面的结果可以看出:Date中的日期是从1970/7/1 08:00:00开始的,getTime方法得到的应该是当前的时间,不过是整数值,而无参构建的Date对象默认为当前时间,有参构造会将传入的整数值转换为某个日期。

SimpleDateFormat类

Date类的getTime方法可以明确获得当前的日期时间,但是返回的数据类型可读性却不好。JAVA针对这种情况提供了java.text.SimpleDateFromat类进行转换。

import java.util.Date; import java.text.SimpleDateFormat; public class Demo { public static void main(String[] args) throws Exception { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(d.getTime())); System.out.println(sdf.parse("2022-13-30 25:00:00")); } }

执行结果为:

2022-05-29 16:50:25 Tue Jan 31 01:00:00 CST 2023

从上面的代码可以看出,SimpleDateFormat可以将原来的整数值按照"yyyy-MM-dd HH:mm:ss"转换为了可读的日期格式,同时还可以将字符串格式的日期转换为Date对象。另外SimpleDateFormat在解析字符串格式的日期时还可以将不正确的日期进行自动转换,变为正常的日期。

Calendar类

Calendar类可以将取得的时间精确到毫秒,并且可以分别取得各个阶级的日期属性,以进行各种日期时间的计算操作。

import java.util.Calendar; public class Demo { public static void main(String[] args) throws Exception { Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR)); System.out.println(c.get(Calendar.MONTH)); System.out.println(c.get(Calendar.DAY_OF_MONTH)); System.out.println(c.get(Calendar.HOUR_OF_DAY)); System.out.println(c.get(Calendar.MINUTE)); System.out.println(c.get(Calendar.SECOND)); } }

执行结果为:

2022 4 29 17 0 15

这里的月份显式不对,是因为Calendar类的月份是从0开始计算的,因此需要在得到的结果上加1,同时月份显示为4,而不是04。如果能够将获得的Calendar的日期属性和SimpleDateFormat结合,就可以统一显示的格式了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3