(18)Java中的数字处理类

数字格式化类

  • 为什么要格式化数字?

    数字的格式化在解决实际问题时非常普遍,如表示超市的商品价格,需要保留两位有效数字。

  • Java数据遵原则:Java中没有格式化的数据遵循以下原则:

    • 如果数据绝对值大于0.001并且小于10000000,Java将以常规小数形式表示。
    • 如果数据绝对值小于0.001或者大于10000000,Java将以科学记数法表示。
  • DecimalFormat类:由于上述输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在Java中可以使用DecimalFormat类进行格式化操作。

  1. 概念:DecimalFormat类是抽象类NumberFormat类的一个子类,用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。一般情况下可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。

  2. 当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配。

     1. 0:阿拉伯数字,如果不存在则显示为 0。
     2. #:阿拉伯数字。
     3. .:小数分隔符或货币小数分隔符。
     4. -:减号。
     5. ,:分组分隔符。
     6. E:分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。
     7. ;:分隔正数和负数子模式。
     8. %:乘以 100 并显示为百分数。
     9. \u2030:乘以 1000 并显示为千分数。
     10. \u00A4:货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。
     11. ':用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"。
    

例子:

	public class DecimalDemo {
			//使用实例化对象时设置格式化模式
			public static void simgleFormat(String pattern, double value){
				DecimalFormat df = new DecimalFormat(pattern);
				String output = df.format(value);
				System.out.println("原数字:"+value+",格式化模板:"+pattern+",格式化后:"+output);
			}
			//使用applyPattern()方法对数字进行格式化
			public static void applyFormat(String pattern, double value){
				DecimalFormat df = new DecimalFormat();//实例化DecimalFormat对象
				df.applyPattern(pattern);//调用applyPattern()方法设置格式化模板
				String output = df.format(value);
				System.out.println("原数字:"+value+",格式化模板:"+pattern+",格式化后:"+output);
			}
			public static void main(String[] args) {
				//1.格式化小数,该位不存在时,显示0。整数部分出现的0,如果位置上不存在数字用0补充
				simgleFormat("0000000000.000", 123456.78);
				//2.格式化小数,多余的位数会五舍六入。
				simgleFormat("000,000.000", 123456.7895);
				//3.小数后如果位置上不存在数字则不显示,整数部分没有作处理:当小数点前为0时,就会省略0。
				applyFormat(".###", 0.78);
				//4.整数部分加上#会进行处理,整数位置上不存在数字则不显示
				applyFormat("##.###", 0.78);
				//5.相当于*100 并且保留最多两位小数使用百分数,并保留最多两位小数
				simgleFormat(".##%", 0.7895);
				//6.保留两位小数,且小数后两位用0补充
				simgleFormat(".00%", 0.78);
				//7.使用千分号\u2030, 相当于*1000
				simgleFormat(".##\u2030", 0.234567);
				simgleFormat(".##\u2030", 11.234567);
				//8.使用.00
				simgleFormat(".00\u2030", 0.2);
				simgleFormat(".00\u2030", 11.2);
				//9.\u00A4货币标识,放在数字前(默认语言环境货币)
				simgleFormat("\u00A4##.##", 12.345);
				//10.'Money Amount:',###.###'$',单引号中的内容会当作普通字符处理
				simgleFormat("'Money Amount:',###.###'$'", 123.4);
				simgleFormat("'Money Amount:',###.###'$'", 123.45678);
			}
		}
		//执行结果
		原数字:123456.78,格式化模板:0000000000.000,格式化后:0000123456.780
		原数字:123456.7895,格式化模板:000,000.000,格式化后:123,456.790
		原数字:0.78,格式化模板:.###,格式化后:.78
		原数字:0.78,格式化模板:##.###,格式化后:0.78
		原数字:0.7895,格式化模板:.##%,格式化后:78.95%
		原数字:0.78,格式化模板:.00%,格式化后:78.00%
		原数字:0.234567,格式化模板:.##‰,格式化后:234.57‰
		原数字:11.234567,格式化模板:.##‰,格式化后:11234.57‰
		原数字:0.2,格式化模板:.00‰,格式化后:200.00‰
		原数字:11.2,格式化模板:.00‰,格式化后:11200.00‰
		原数字:12.345,格式化模板:¤##.##,格式化后:¥12.34
		原数字:123.4,格式化模板:'Money Amount:',###.###'$',格式化后:Money Amount:123.4$
		原数字:123.45678,格式化模板:'Money Amount:',###.###'$',格式化后:Money Amount:123.457$
  • DecimalFormat类中的特殊方法
  1. 方法:setGroupingSize(int newValue);返回值:void;功能释义:设置分组大小。只分整数部分。

  2. 方法:setGroupingUsed(boolean b);返回值:void;功能释义:设置是否支持分组。

     public static void main(String[] args) {
     	DecimalFormat df = new DecimalFormat();
     	 df.setGroupingSize(3);
     	String output = df.format(123456.789);
     	System.out.println("将数字以每三个数字分组:"+output);
     	df.setGroupingUsed(false);
     	String output2 = df.format(123456.789);
     	System.out.println("不允许的数字分组:"+output2);
     }
     执行结果:
     将数字以每两个数字分组:123,456.789
     不允许的数字分组:123456.789
    

Math类

  • 概念:在Math类中提供了众多数学函数方法,主要包括三角函数方法、指数函数方法、取整函数方法、取最大值、最小值以及平均值函数方法,这些都被定义为static形式,所以在程序中应用比较简便。

  • Math方法调用方式:

    扫描二维码关注公众号,回复: 9906734 查看本文章
      Math.数学方法
      Math.常量名
    
  • 1,常用数学运算方法

    • 三角函数方法:以下所有方法返回值均为double

        1. sin(double a):返回角的三角正弦。-->Math.sin(Math.PI/2)
        2. cos(double a):返回角的三角余弦。
        3. tan(double a):返回角的三角正切。
        4. asin(double a):返回一个值的反正弦。
        5. acos(double a):返回一个值的反余弦。
        6. atan(double a):返回一个值的反正切。
        7. toRadians(double angdeg):将角度转换为弧度。
        8. toDegrees(double angrad):将弧度转换为角度。
        //注意:角度与弧度的转换通常是不精确的。
      
  • 2,指数函数方法

  •   1. exp(double a):用于获取e的a次方,即取e^a。e=2.7182818284590452354。e,作为数学常数,是自然对数函数的底数。有时称它为欧拉数(Euler number),以瑞士数学家欧拉命名。--> Math.exp(2)
      2. log(double a):返回 double 值的自然对数(底数是 e)。
      3. log10(double a):返回 double 值的底数为 10 的对数。
      4. sqrt(double a):返回正确舍入的 double 值的正平方根。其中,a的值不能为负值。
      5. cbrt(double a):返回 double 值的立方根。
      6. pow(double a, double b):返回第一个参数的第二个参数次幂的值。即a^b。
    
  • 3,取整函数方法

      1. ceil(double a):返回大于等于参数的最小整数。向上取整。->Math.ceil(5.2)
      2. floor(double a):返回小于等于参数的最大整数,向下取整。
      3. rint(double a):返回与参数最接近的整数,如果两个同为整数且同样相近,则结果取偶数。
      4. round(float a):返回最接近参数的 int。四舍五入。
      5. round(double a):返回最接近参数的 long。
    
  • 4,随机数Math.random()方法

  1. Math.random()方法释义:此方法用于产生随机数。这个方法默认生成大于等于且小1.0的double型随机数,即0<=Math.random()<1.0。

  2. 如何随机出0-n的随机数:(int) (Math.random()*n)。

  3. 如何随机出m-n的随机数,即大于等于m且小于n:m+(int) (Math.random()*(n-m))。

  4. 随机生成a~z中的一个字母:(char)(‘a’+Math.random()*(‘z’-‘a’+1))。

  5. 随机生成任意区间的一个字符:(char)(char1+Math.random()*(char2-char1+1))。

Random类

  • 除了Math类中的random()方法可以获取随机数之外,Java中还提供了一种可以获取随机数的方式,那就是java.util.Random类。可以通过实例化一个Random对象创建一个随机数生成器。

  • Random类生成随机数原理:Java编译器以系统当前时间作为随机数生成器的种子,因为每时每刻的时间不可能相同,所以产生的随机数不同,但是如果运行速度太快,也会产生两次运行结果相同的随机数。

  • 构造方法:Random(long seed):seed,随机数生成器的种子。

  1. 常用方法:

     1. nextInt():返回一个随机整数。--> new Random().nextInt();
     2. nextInt(int n):返回一个大于等于0且小于n的随机数。
     3. nextLong():返回一个随机长整型值。
     4. nextBoolean():返回一个随机布尔型值。
     5. nextFloat():返回一个随机浮点型值。
     6. nextDouble():返回一个随机双精度型值。
     7. nextGaussian():返回一个概率密度为高斯分布的双精度值。它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差
    

BigInteger类

  • 为什么使用BigInteger类: 由于int的最大值为2^31-1,如果要计算更大的数字,Integer就无法实现了,所以Java中提供了BigInteger类来处理更大的数字。BigInteger支持任意精度的整数,也就是说在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失任何信息.在BigInteger类中封装了多种操作,除了基本加减乘除外,还提供了绝对值、相反数、最大公约数、以及判断是否为质数等操作。

  • 构造方法

      	BigInteger(String val):将十进制数字字符串转换为BigInteger形式。
      	BigInteger bi = new BigInteger("22");
    
  • 常用方法

      1. add(BigInteger val):返回其值为 (this + val) 的 BigInteger。加法。--> new BigDecimal("1").add(new BigDecimal("2"));
      2. subtract(BigInteger val): 返回其值为 (this - val) 的 BigInteger。减法。
      3. multiply(BigInteger val):返回其值为 (this * val) 的 BigInteger。乘法。
      4. divide(BigInteger val):返回其值为 (this / val) 的 BigInteger。除法。
      5. remainder(BigInteger val):返回其值为 (this % val) 的 BigInteger。取余。
      6. divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
      7. pow(int exponent):返回其值为 (this ^ exponent) 的 BigInteger。
      8. negate():返回其值是 (-this) 的 BigInteger。
      9. shiftLeft(int n):返回其值为 (this << n) 的 BigInteger。
      10. shiftRight(int n):返回其值为 (this >> n) 的 BigInteger。
      11. and(BigInteger val):返回其值为 (this & val) 的 BigInteger。
      12. or(BigInteger val):返回其值为 (this | val) 的 BigInteger。
      13. compareTo(BigInteger val):将此 BigInteger 与指定的 BigInteger 进行比较。
      14. equals(Object x):比较此 BigInteger 与指定的 Object 的相等性。
      15. min(BigInteger val):返回此 BigInteger 和 val 的最小值。
      16. max(BigInteger val):返回此 BigInteger 和 val 的最大值。
    

BigDecimal类

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

  • 常用构造方法

      1. BigDecimal(double val):将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式。
      2. BigDecimal(String val):将 BigDecimal 的字符串表示形式转换为 BigDecimal。
    
  • 常用方法加减乘除

      1. public BigDecimal add(BigDecimal augend):返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。加法。
    
      2. public BigDecimal subtract(BigDecimal subtrahend):返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。减法。
      3. public BigDecimal multiply(BigDecimal multiplicand):返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。乘法。
      4. public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode):做除法操作,方法中三个参数分别代表:divisor - 此 BigDecimal 要除以的值。scale - 要返回的 BigDecimal 小数点后的位数。roundingMode - 要应用的舍入模式。roundingMode近似处理模式BigDecimal类中提供了多种处理模式:
    

下一章,(19)Java中的数据存储区域和高精度类

发布了67 篇原创文章 · 获赞 19 · 访问量 9890

猜你喜欢

转载自blog.csdn.net/qq_41530004/article/details/102590808