当前位置: 首页 > news >正文

Java常用工具类的使用

1.BigDecimal

在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

在使用BigDecimal类来进行计算的时候,主要分为以下步骤:

     1、用float或者double变量构建BigDecimal对象。

     2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

     3、把BigDecimal对象转换成float,double,int等类型。

          一般来说,可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。

  BigDecimal b1 = new BigDecimal(Double.toString(0.48));

  BigDecimal b2 = BigDecimal.valueOf(0.48);

        对于常用的加,减,乘,除,BigDecimal类提供了相应的成员方法。

  public BigDecimal add(BigDecimal value);   

  public BigDecimal subtract(BigDecimal value);  

  public BigDecimal multiply(BigDecimal value);  

  public BigDecimal divide(BigDecimal value); 

 进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用doubleValue()等方法。

package com.ylfeiu.utils;

import java.math.BigDecimal;

public class Decimal {

	public static void main(String[] args) {

		BigDecimal big = new BigDecimal(Double.toString(15.2658));
		BigDecimal big2 = new BigDecimal(3.141592653);
		BigDecimal big3 = BigDecimal.valueOf(3.141592653);

		System.out.println(big.divide(big2, 6, BigDecimal.ROUND_HALF_UP).doubleValue() + "\n");//6是精度位数,
//ROUND_HALF_UP是向上取整
System.err.println(big + "\n" + big2 + "\n" + big3); } }

2.SimpleDateFormat

SimpleDateFormat的继承关系:
java.lang.Object
   |
   +----java.text.Format
           |
           +----java.text.DateFormat
                   |
                   +----java.text.SimpleDateFormat

格式化字母涵义:

y 年  M 月 d 日

h 时 在上午或下午 (1~12) ,H 时 在一天中 (0~23) 

m 分 s 秒S 毫秒 

E 星期 

D 一年中的第几天 

F 一月中第几个星期几 

w 一年中第几个星期 

W 一月中第几个星期 

a 上午 / 下午 标记符  

k 时 在一天中 (1~24) 

K 时 在上午或下午 (0~11) 

z 时区     

package com.ylfeiu.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 
 * @author Administrator
 * 该类演示如何格式化时间
 */

public class FormatDateTime {

	public static void main(String[] args) {

		SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E");// 月,时是大写字母
		
		SimpleDateFormat myFmt1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");// 格式符号等价于now.toLocaleString(),也就是说now.toLocaleString()指定了格式
																			// 当然我们可以像这样自定义格式化yyyy/MM/dd HH:mm:ss
		SimpleDateFormat myFmt2 = new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
				
		Date now = new Date();

		Calendar c = Calendar.getInstance();
		
		System.err.println(c.get(Calendar.YEAR));//2014
		System.err.println(now.getYear());//114?不推荐,已过时
		
		System.out.println("==============================");
		Calendar c3 = Calendar.getInstance();
        c3.add(Calendar.DATE, 100);//往后推算:100天以后
        int year = c3.get(Calendar.YEAR);        
        int month = c3.get(Calendar.MONTH) + 1;       
        int date = c3.get(Calendar.DATE);
        System.out.println("100天以后是:"+year + "年" + month + "月" + date + "日");
		
		System.out.println("==============================");
		
		System.out.println(myFmt1.format(c.getTime()));
		System.out.println(myFmt1.format(now));
		
		System.out.println(myFmt.format(now));
		System.out.println(myFmt2.format(now));		
		//System.out.println(now.toLocaleString());// 已经过时,不推荐使用了,而且月份没有了0(1-10)
		
		System.err.println(now);//Tue Mar 11 17:07:00 CST 2014
	}

}

 

3.随机数类Random

java 的随机数测试程序。共3种获取随机数的方法:

通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字

通过Math.random()返回一个0到1之间的double值.

通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

package com.ylfeiu.utils;

import java.util.Random;

public class RandomTest {

	public static void main(String args[]) {
		testSystemTimeMillis();
		testMathRandom();

		// 新建“种子为1000”的Random对象,并通过该种子去测试Random的API
		testRandomAPIs(new Random(1000), " 1st Random(1000)");
		testRandomAPIs(new Random(1000), " 2nd Random(1000)");
		// 新建“默认种子”的Random对象,并通过该种子去测试Random的API
		testRandomAPIs(new Random(), " 1st Random()");
		testRandomAPIs(new Random(), " 2nd Random()");
	}

	/**
	 * 返回随机数-01:测试System的currentTimeMillis()
	 */
	private static void testSystemTimeMillis() {
		// 通过
		final long l = System.currentTimeMillis();
		// 通过l获取一个[0, 100)之间的整数
		final int i = (int) (l % 100);

		System.out.printf(
				"\n---- System.currentTimeMillis() ----\n l=%s i=%s\n", l, i);
	}

	/**
	 * 返回随机数-02:测试Math的random()
	 */
	private static void testMathRandom() {
		// 通过Math的random()函数返回一个double类型随机数,范围[0.0, 1.0)
		final double d = Math.random();
		// 通过d获取一个[0, 100)之间的整数
		final int i = (int) (d * 100);

		System.out.printf("\n---- Math.random() ----\n d=%s i=%s\n", d, i);
	}

	/**
	 * 返回随机数-03:测试Random的API
	 */
	private static void testRandomAPIs(Random random, String title) {
		final int BUFFER_LEN = 5;
		// 获取随机的boolean值
		boolean bool = random.nextBoolean();
		// 获取随机的数组buf[]
		byte[] buf = new byte[BUFFER_LEN];
		random.nextBytes(buf);
		// 获取随机的Double值,范围[0.0, 1.0)
		double d = random.nextDouble();
		// 获取随机的float值,范围[0.0, 1.0)
		float f = random.nextFloat();
		// 获取随机的int值
		int i1 = random.nextInt();
		// 获取随机的[0,100)之间的int值
		int i2 = random.nextInt(100);

		// 获取随机的long值
		long l = random.nextLong();

		System.out.printf(
				"\n---- %s ----\nb=%s, d=%s(范围[0.0, 1.0)), f=%s(范围[0.0, 1.0)), i1=%s, i2=%s(i2指定的有范围,它有重载方法), l=%s, buf=[",
				title, bool, d, f, i1, i2, l);
		for (byte bt : buf)
			System.out.printf("%s, ", bt);
		System.out.println("]");
	}
}

4.日历类Calendar 

从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。

其实Calendar类中还提供了很多其它有用的方法,下面简单的介绍几个常见方法的使用。

a、set()

package com.ylfeiu.utils;

import java.util.Calendar;

/**
 * 该类计算指定两个日期之间的相差天数
 * 
 * @author Administrator
 * 
 */
public class DateExample1 {
	public static void main(String[] args) {
		// 设置两个日期
		// 日期:20130219
		Calendar c1 = Calendar.getInstance();
		c1.set(2013, 3 - 1, 19);
		// 日期:20140311
		Calendar c2 = Calendar.getInstance();
		c2.set(2014, 4 - 1, 11);
		// 转换为相对时间
		long t1 = c1.getTimeInMillis();
		long t2 = c2.getTimeInMillis();
		// 计算天数
		long days = (t2 - t1) / (24 * 60 * 60 * 1000);
		System.out.println(days);
	}
}

b.getTime()

c.add()

例子在SimpleDateFormat中有体现

package com.ylfeiu.utils;

import java.util.Calendar;

/**
 * 打印当前月份日历
 * 
 * @author Administrator
 * 
 */
public class GetCalendar {
	public static void main(String[] args) {
		// 获得当前时间
		Calendar c = Calendar.getInstance();
		// 设置代表的日期为1号
		c.set(Calendar.DATE, 1);
		// 获得1号是星期几
		int start = c.get(Calendar.DAY_OF_WEEK);
		// 获得当前月的最大日期数
		int maxDay = c.getActualMaximum(Calendar.DATE);

		// 输出标题
		System.out.println("星期日	星期一 	星期二 	星期三 	星期四 	星期五   	星期六");
		// 输出开始的空格
		for (int i = 1; i <start; i++) {
			System.out.print("	");
		}
		// 输出该月中的所有日期
		for (int i = 1; i <= maxDay; i++) {
			// 输出日期数字
			System.out.print(" " + i);
			// 输出分隔空格
			System.out.print("     ");
			//对前10位数字排版,因为它们只有一位数
			if (i < 10) {
				System.out.print(' ');
			}
			// 判断是否换行
			if ((start + i - 1) % 7 == 0) {
				System.out.println();
			}
		}
		// 换行
		System.out.println();
	}
}

  

  

 

 

 

 

转载于:https://www.cnblogs.com/ylfeiu/p/3594703.html

相关文章:

  • 精彩十年(4)——缔造神话
  • HibernateDaoSupport实现分页技术总结
  • 新作《.NET 4.0面向对象编程漫谈》之序“穿越梦想、起锚远航”
  • java synchronized详解(非常详细)
  • 123456789分割成12,34,56,789
  • 分享代码
  • C语言实现 字符串过滤并修改并返回个数
  • 记录:对这次转正的一些预测
  • mysql插入中文报错
  • Nebula3嵌入WPF
  • i=i++在java等高级语言的解释
  • JVM学习笔记(一)------基本结构
  • JVM学习笔记(二)------Java代码编译和执行的整个过程
  • 工具汇总
  • 听讲座笔记:国立交通大学《如何成功投稿国际科学期刊》 投稿准备+审稿流程剖析...
  • Docker入门(二) - Dockerfile
  • JavaScript HTML DOM
  • laravel5.5 视图共享数据
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Node 版本管理
  • React 快速上手 - 07 前端路由 react-router
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue自定义指令实现v-tap插件
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用Gradle第一次构建Java程序
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 我有几个粽子,和一个故事
  • 详解NodeJs流之一
  • 在Mac OS X上安装 Ruby运行环境
  • 积累各种好的链接
  • 如何正确理解,内页权重高于首页?
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $$$$GB2312-80区位编码表$$$$
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)fread与fwrite详解
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (论文阅读30/100)Convolutional Pose Machines
  • (七)Java对象在Hibernate持久化层的状态
  • (三分钟)速览传统边缘检测算子
  • (十五)使用Nexus创建Maven私服
  • (一)RocketMQ初步认识
  • (转)Mysql的优化设置
  • ./configure、make、make install 命令
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net转前端开发-启航篇,如何定制博客园主题
  • ??javascript里的变量问题
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网