JAVA基础编程 |
您所在的位置:网站首页 › 和与合的区别是什么 › JAVA基础编程 |
数字处理
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 |