今天看了java从入门到精通的第八章和第九章,第八章是包装类。其中是一些对于数据类型包装了类。比如int double 等等。其中一些方法也很相似,如果需要学习需要查询一下API文档即可。但是对与第九章的知识点,我很少接触过,所以有必要记下来,以便以后复习。这一章讲了几个点:
1、掌握如何对数字进行格式化。
2、掌握Math类中的各种数学运算方法。
3、掌握生成任意范围内的随机数。
4、掌握大整数与大小数的数学运算方式。
对于第一节的内容。讲述了关于java.text.DecimalFormat的内容。讲了关于数字格式话问题。对于这一章的内容要学好我觉得得先掌握一些常用的特殊字符的使用。如果只说理论难免会很难理解,直接写一个例子就能明白数字格式化的原理。下面例子定义了两种方法,实现了两种格式化方法。程序如下:
package com.tangdeqiang.rtbc2;import java.text.DecimalFormat;public class DeclimalFormatSimpleDemo { //使用实例化对象时设置格式化模式 static public void SimgleFoormat(String pattern,double value){ //实例化DecimaFormat对象 DecimalFormat myFormat=new DecimalFormat(pattern); String output=myFormat.format(value);//将数字进行格式化 System.out.println(value+" "+pattern+" "+output); } static public void UseApplyPatternMethodFormat(String pattern,double value){ DecimalFormat myFormat=new DecimalFormat();//实例化DecimaFormat对象 myFormat.applyPattern(pattern);//调用applyPattern()方法设置格式化模板 System.out.println(value+" "+pattern+" "+myFormat.format(value)); } public static void main(String[]args){ SimgleFoormat("###,###.###", 123456.789);//调用静态方法SimgleFormat SimgleFoormat("00000000.###kg",123456.789);//在数字后加上单位 //按照格式模板格式化数字,不存在的为以0显示 SimgleFoormat("000000.000", 123.78); //调用静态UseApplyPatternMethodFormat()方法 UseApplyPatternMethodFormat("#.###%", 0.789); //将小数点后格式化为两位 UseApplyPatternMethodFormat("###.##", 123456.789); //将数字转化为千分数形式 UseApplyPatternMethodFormat("0.00\u2030", 0.789); }}
在数字格式化中还有对数字进行分组和是否允许分组的方法。具体应用看下面的程序。
package com.tangdeqiang.rtbc2;import java.text.DateFormat;import java.text.DecimalFormat;public class DecimalMathod { public static void main(String[]args){ DecimalFormat myFormat=new DecimalFormat(); myFormat.setGroupingSize(2); String output=myFormat.format(123456.789); System.out.println("讲数字以每两个数字分组"+output); myFormat.setGroupingUsed(false); String output2=myFormat.format(123456.789); System.out.println("不允许数字分组"+output2); }}
在第二节中。对于运算Math类,作了详细的解释。对于java中的运算类。其中都是写对数学的运算方法。比如三角函数、平方等等。具体的请查看API文档。调用方法的时候一定要注意使用类名.成员变量的形式来调用,不然会调用失败。运算方法大致分为四类。三角函数,指数函数,取整函数,最大值最小值绝对值函数。
在第三节中讲述了随机数,在Math类中存在一个random()方法,用于产生随机数字,但是这个方法默认产生大于0.0小于1.0的double型的随机数。因此在使用时我们需要稍加处理。比如乘一个数 除以一个数等等。除了Math类中提供了random这个方法外。在java.util中还提供了一个Random随机类。这里面有很多生成随机数的方法,请查看API文档。请看下面一个例子:
package com.tangdeqiang.rtbc2;import java.util.Random;public class RandomDemo { public static void main(String[]args){ Random r=new Random();//实例化一个随机对象 //随机产生一个数 System.out.println("随机产生一个整数:"+r.nextInt()); //随机产生一个大于0小于10的整数 System.out.println("随机产生一个大于0小于10的整数:"+r.nextInt(10)); //随机产生一布尔型的值 System.out.println("随机产生一个布尔值:"+r.nextBoolean()); System.out.println("随机产生一双精度的值:"+r.nextDouble()); System.out.println("随机产生一个概率密度为高斯分布的双精度值:"+r.nextGaussian()); System.out.println("随机产生一个浮点数:"+r.nextFloat()); }}
第四节讲了大数字运算。其中在java.math包里有两个类BigInteger和BigDecimal类。这两个类用于高精度运算,前者是针对大整数处理类,后者是针对大小数的处理类。其中的方法请看API文档。.对于BigDecimal加入了小数的概念,可以实现任何精度的运算,所以在除法中会有一定的处理,因为会出现除不尽的情况,所以在java中的API文档中会有对BigDecimal类中的divide()方法的多种处理模式。举例如下:
package com.tangdeqiang.rtbc2;import java.math.BigDecimal;import java.text.DecimalFormat;public class DecimalMathod { public static void main(String[]args){ DecimalFormat myFormat=new DecimalFormat(); myFormat.setGroupingSize(2); String output=myFormat.format(123456.789); System.out.println("讲数字以每两个数字分组"+output); myFormat.setGroupingUsed(false); String output2=myFormat.format(123456.789); System.out.println("不允许数字分组"+output2); DecimalMathod b=new DecimalMathod(); System.out.println("两个数相加的结果:"+b.add(-7.4, 8.9)); System.out.println("两个数相减的结果:"+b.sub(-7.4, 8.9)); System.out.println("两个数相乘的结果:"+b.mul(-7.4, 8.9)); System.out.println("两个数相除的结果,结果小数保留10位"+b.div(10, 2)); System.out.println("两个数相除的结果,保留小数5位"+b.div(-7.5, 8.9,5)); } static final int location=10; public BigDecimal add(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.add(b2); } public BigDecimal sub(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.subtract(b2); } public BigDecimal mul(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.multiply(b2); } /* public BigDecimal div(double value1,double value2){ BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.divide(b2); } *///对于这一段代码不能这么写,是因为在java中会出现除不尽的情况,所以会对除法进行一个处理,处理方法见下面例子 public BigDecimal div(double value1,double value2){ return div(value1,value2,location);//调用自定义除法方法 } public BigDecimal div(double value1,double value2,int b){ if(b<0){ System.out.println("b值必须大于等于0"); } BigDecimal b1=new BigDecimal(Double.toString(value1)); BigDecimal b2=new BigDecimal(Double.toString(value2)); return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP); }}