Java数学与日期

Java数字和日期处理:Java数字处理和日期类

java Math类的常用方法

1.静态常量

Math类中包含E和PI连个静态变量,如它们名字 e(自然对数)和 π(圆周率)。

         System.out.println(Math.E); //2.71
         System.out.println(Math.PI);//3.14

求最大值和最小值以及绝对值

方法说明
static int abs(int a)返回 a 的绝对值
static long abs(long a)返回 a 的绝对值
static float abs(float a)返回 a 的绝对值
static double abs(double a)返回 a 的绝对值
static int max(int x,int y)返回 x 和 y 中的最大值
static double max(double x,double y)返回 x 和 y 中的最大值
static long max(long x,long y)返回 x 和 y 中的最大值
static float max(float x,float y)返回 x 和 y 中的最大值
static int min(int x,int y)返回 x 和 y 中的最小值
static long min(long x,long y)返回 x 和 y 中的最小值
static double min(double x,double y)返回 x 和 y 中的最小值
static float min(float x,float y)返回 x 和 y 中的最小值
        System.out.println(Math.max(10,12));
        System.out.println(Math.abs(-20));
        System.out.println(Math.min(12,45));

求整运算

方法说明
static double ceil(double a)返回大于或等于 a 的最小整数
static double floor(double a)返回小于或等于 a 的最大整数
static double rint(double a)返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数
static int round(float a)将参数加上 1/2 后返回与参数最近的整数
static long round(double a)将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型

三角运算

方法说明
static double sin(double a)返回角的三角正弦值,参数以孤度为单位
static double cos(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 tan(double a)返回角的三角正切值,参数以弧度为单位
static double atan(double a)返回一个值的反正切值,值域在 [-PI/2,PI/2]
static double toDegrees(double angrad)将用孤度表示的角转换为近似相等的用角度表示的角
staticdouble 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生成随机数(random()和Random类)

1.Math.random()方法是生成的是一个在(0,1)之间的double类型的值

2.Random类是位于java.util.Random中的一个类,它可以生成丰富的随机数,可以是boolean,int,long,float,byte等等

  • Random():该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象。
  • Random(long seed):使用单个 long 类型的参数创建一个新的随机数生成器
方法说明
boolean nextBoolean()生成一个随机的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble()生成一个随机的 double 值,数值介于 [0,1.0),含 0 而不包含 1.0
int nextlnt()生成一个随机的 int 值,该值介于 int 的区间,也就是 -231~231-1。如果
需要生成指定区间的 int 值,则需要进行一定的数学变换
int nextlnt(int n)生成一个随机的 int 值,该值介于 [0,n),包含 0 而不包含 n。如果想生成
指定区间的 int 值,也需要进行一定的数学变换
void setSeed(long seed)重新设置 Random 对象中的种子数。设置完种子数以后的 Random 对象
和相同种子数使用 new 关键字创建出的 Random 对象相同
long nextLong()返回一个随机长整型数字
boolean nextBoolean()返回一个随机布尔型值
float nextFloat()返回一个随机浮点型数字
double nextDouble()返回一个随机双精度值
        Random r=new Random(); //import java.util.Random
        double d=r.nextDouble();
        int i=r.nextInt();
        long l=r.nextLong();
        boolean b=r.nextBoolean();
        float f=r.nextFloat(10);
        System.out.println(d);
        System.out.println(i);
        System.out.println(l);
        System.out.println(f);
        System.out.println(b);
        r.setSeed(100);

Java数字格式化

符号说明
0显示数字,如果位数不够则补 0
#显示数字,如果位数不够不发生变化
.小数分隔符
-减号
,组分隔符
E分隔科学记数法中的尾数和小数
%前缀或后缀,乘以 100 后作为百分比显示
?乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替;
如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符

DecimalFormat 是 NumberFormat 的一个子类,用于格式化十进制数字。DecimalFormat 类包含一个模式和一组符号。

Java大数字运算(BigInteger类和BigDecimal类)

BigInteger 类型的数字范围较 Integer 类型的数字范围要大得多。BigInteger 支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值。

除了基本的加、减、乘、除操作之外,BigInteger 类还封装了很多操作,像求绝对值、相反数、最大公约数以及判断是否为质数等。

要使用 BigInteger 类,首先要创建一个 BigInteger 对象。BigInteger 类提供了很多种构造方法,其中最直接的一种是参数以字符串形式代表要处理的数字。

BigInteger(String val) BigInteger bi = new BigInteger(“5”)

方法名称说明
add(BigInteger val)做加法运算
subtract(BigInteger 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)做数字的比较运算
equals(Object obj)当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false
min(BigInteger val)返回较小的数值
max(BigInteger val)返回较大的数值
        BigInteger b=new BigInteger("5");
        System.out.println(b);
        System.out.println(b.add(new BigInteger("6")));
        System.out.println(b.subtract(new BigInteger("6")));
        System.out.println(b.multiply(new BigInteger("6")));
        System.out.println(b.divide(new BigInteger("5")));

BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念。一般的 float 和 double 类型数据只能用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到 BigDecimal 类。BigDecimal 类支持任何精度的浮点数,可以用来精确计算货币值。

BigDecimal 常用的构造方法如下。

  • BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。
  • BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。

BigDecimal 类的方法可以用来做超大浮点数的运算,像加、减、乘和除等。在所有运算中,除法运算是最复杂的,因为在除不尽的情况下,末位小数的处理方式是需要考虑的

roundingMode参数支持的处理模式

模式名称说明
BigDecimal.ROUND_UP商的最后一位如果大于 0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN
模式处理
BigDecimal.ROUND_FLOOR与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理;
如果是负数,按照 ROUND_UP 模式处理
BigDecimal.ROUND_HALF_ DOWN对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后
一位进行进位操作
BigDecimal.ROUND_HALF_UP对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位
进行进位操作
BigDecimal.ROUND_HALF_EVEN如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按
照 ROUND_HALF_DOWN 处理

Java时间日期的处理:Java Date类,Calendar类

1.构造方法

    • Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。
    • Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
        Date d1=new Date();
        System.out.println(d1);

        Date d2 =new Date(10000);
        System.out.println(d2);

2.Date提供的常用方法

方法描述
boolean after(Date when)判断此日期是否在指定日期之后
boolean before(Date when)判断此日期是否在指定日期之前
int compareTo(Date anotherDate)比较两个日期的顺序
boolean equals(Object obj)比较两个日期的相等性
long getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString()把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。
其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)
        Date d1=new Date();
        try {
            Thread.sleep(60000);// 暂停 1 分钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Date d2 =new Date();
        System.out.println("事情已经过去了 " + (d2.getTime() - d1.getTime()) / 1000 + " 秒");

Calendar类

创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。

  1. Calendar c = Calendar.getInstance();
方法描述
void add(int field, int amount)根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount
boolean after(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果
boolean before(Object when)判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果
void clear()清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar)比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日
00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field)返回指定日历字段的值
int getActualMaximum(int field)返回指定日历字段可能拥有的最大值
int getActualMinimum(int field)返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek()获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance()使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone)使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone,
Locale aLocale)
使用指定时区和语言环境获得一个日历
Date getTime()返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时
00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位
void set(int field, int value)为指定的日历字段设置给定值
void set(int year, int month, int date)设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay,
int minute, int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value)设置一星期的第一天是哪一天
void setTimeInMillis(long millis)用给定的 long 值设置此 Calendar 的当前时间值

Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。

Calendar 类中定义了许多常量,分别表示不同的意义。

  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
  • Calendar.HOUR:12小时制的小时。
  • Calendar.HOUR_OF_DAY:24 小时制的小时。
  • Calendar.MINUTE:分钟。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期几。
        Calendar cal = Calendar.getInstance();
        int month=cal.get(Calendar.MONTH);
        System.out.println(month+1);
        cal.setTime(new Date());
        System.out.println("现在时刻:" + cal.getTime());
        int year =cal.get(Calendar.YEAR);
        System.out.println("现在是" + year + "年");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值