JAVA——从基础学起(七)数字处理类

七 数字处理类

7.1 数字格式化

数字格式化主要针对的是浮点型数据,在Java中使用java.text.DecimalFormat格式化数字。
在Java中没有进行格式化的数字遵循以下原则:
数值的绝对值大于0.001且小于10000000,使用常规小数形式表示
数值绝对值小于0.001或大于10000000,使用科学计数法表示。

DecimalFormat类是umberFormat的一个子类,用于格式化十进制数字。可以将一些数字格式化为整数,百分数,腹地拿书等,通常情况下可以在实例化DecimalFormat类时传递格式,也可以使用该类中的applyPattern方法传递格式。

当格式化数字时,在DecimalFormat类中会有一个格式化模板

字符 说明
0 代表一位阿拉伯数字,如果该位不存在数字则显示0
# 代表一位阿拉伯数字,存在数字则显示,不存在数字则不显示
. 小数分隔符或货币小数分隔符
- 负号
分组分隔符
E 分割科学计数法中的指数和尾数
% 放置在数字的前缀或后缀,将数字乘以100显示为百分数
\u2030 放在数字的前缀或后缀,将数字乘以1000显示为千分数
\u00A4 放置在数字的前缀或后缀,用作货币记号
当上述特殊符号出现在数字中时,应为特殊符号添加单引号,系统会将此符号视为普通符号处理

使用DecimalFormat类对数据格式进行处理时,两种方式分别如下:

package com.mw;
import java.text.DecimalFormat;
public class Main {
//在实例化DecimalFormat对象时限定格式
	public static void SimgleFormat(String pattern , double value) {
		DecimalFormat decimalFormat = new DecimalFormat(pattern);
		String outputString = decimalFormat.format(value);
		System.out.println(outputString);
	}
//在DecimalFormat对象中使用ApplyPattern方法限定格式	
	public static void UseApplyPatternFormat(String pattern , double value) {
		DecimalFormat decimalFormat = new DecimalFormat();
		decimalFormat.applyPattern(pattern);
		String outString = decimalFormat.format(value);
		System.out.println(outString);
	}
	
	public static void main(String[] args) {
		SimgleFormat("0000000.000", 4526.3636);
		UseApplyPatternFormat("000000.000000", 47.63);
	}
}

同时,还可以在DecimalFormat对象中使用setGroupingSize()方法对分组长度进行设置:

package com.mw;
import java.text.DecimalFormat;
public class Main {
	public static void main(String[] args) {
		DecimalFormat decimalFormat = new DecimalFormat();
		decimalFormat.setGroupingSize(3);//设置分组标准为三个数字
		decimalFormat.setGroupingUsed(true);//设置允许分组
		System.out.println(decimalFormat.format(453567.1212));
	}
}

7.2 数学运算

Java中提供了一个可以进行一些基本数学运算的Math类,包含一些常用的数学方法。

7.2.1 Math类

Math类中提供了众多如三角函数,指数函数,取整函数等方法,均使用static修饰,可以非常简便的在程序中使用。除此之外还定义了一些数学常量,如PI,E等

7.2.2 常用数学方法

(1)三角函数方法
public static double sin(double a):sin函数
public static double cos(double a):cos函数
public static double tan(double a):tan函数
public static double asin(double a):arcsin函数
public static double acos(double a):arccos函数
public static double atan(double a):arctan函数
public static double toRadians(double angdeg):表示将角度值转换为弧度值
public static double toDegrees(double angrad):表示将弧度值转换为角度值

(2)指数函数方法
public static double exp(double a):用于获取e的a次方,即ea
public static double log(double a):取自然对数,即lna的值
public static double log10(double a):取底数为10的对数
public static double sqrt(double a):取a的平方根
public static double cbrt(double a):取a的立方根
public static double pow(double a , double b):取a的b次方

(3)取整函数方法
public static double ceil(double a):返回大于等于参数的最小整数
public static double floor(double a):返回小于等于参数的最大整数
public static double rint(double a):返回与结果最接近的整数,若距离相同则返回偶数
public static int round(double a):参数加上0.5后返回与参数最近的整数
public static long round(double a):参数加上0.5后返回最近的整数,转换为long型

(4)取最大值,最小值和绝对值函数方法
public static double max(double a,double b):取a和b之间的最大值
public static double min(double a,double b):取a和b之间的最小值
当然返回值和参数值的类型可以改变,不做赘述
public static double abs(double a):返回参数的绝对值
public static int abs(int a):返回int型参数的绝对值
返回值和参数值同样可以改变

7.3 随机数

7.3.1 Math.random()方法

在Math类中存在一个random()方法,可以用于产生大于等于0.0且小于1.0之间的double型数字,即0.0<=Math.random()<1.0。在该方法上稍作处理即可产生任意范围内的随机数,即:
m+Math.random()*n:可以产生从大于等于m且小于m+n的随机数

不仅如此,使用Math.random()方法还可以随机生成字符:
(char)(char1+Math.random()*(char2-char1+1)):可以产生从char1-char2的随机字符
如:
(char)('a'+Math.random()*('z'-'a'+1)):可以产生从a-z的随机字符

//我们通过上述介绍生成一个随机数生成方法
//生成从num1到num2随机数的方法
public static double randomDouble(double num1 , double num2){
    return (num1 + Math.random()*(num2-num1+1));
}
//生成从字符ch1到字符2的随机字符的方法
public static char randomCharacter(char ch1 , char ch2){
    return (char)(ch1 + Math.random()*(ch2-ch1+1));
}
7.3.2 Random类

除了Math类中的random方法,Java中还提供了一个Random类。通过实例化Random对象可以创建一个随机数生成器。
Random r = new Random()当创建的Random对象没有参数设置时,会默认使用系统当前时间作为随机数生成器的种子。
Random r = new Random(seedValue)同样可以对随机数生成器的种子进行手动设置。

Random类中提供了各种获取不同数据类型随机数方法
public int nextInt():返回一个随机整数
public int nextInt(int n):返回一个大于等于0且小于n的随机整数
public long nextLong():返回一个随机long值
public boolean nextBoolean():返回一个随机布尔值
public float nextFloat():返回一个随机单精度值
public double nextDouble():返回一个随机双精度值
public double nextGaussian():返回一个概率密度为高斯分布的双精度值

7.4 大数字运算

在Java中提供了大数字的操作类:java.math.BigInteger和java.math.BigDecimal。这两个类主要适用于高精度的计算。

7.4.1 BigInteger类

Integer是int数据类型的包装类,但是其能计算的最大值为231-1,如果需要进行更大的数值计算,就需要BigInteger类来实现了
BigInteger类有很多的构造函数,最常见的就是使用数值字符串作为参数:
BigInteger bigInt = new BigInteger(String val)

BigInteger类中有许多可以进行数值计算的方法:
public BigInteger add(BigInteger val):做加法运算
public BigInteger subtarct(BigInteger val):做减法运算
public BigInteger multiply(BigInteger val):做乘法运算
public BigInteger divide(BigInteger val):做除法运算
public BigInteger reminder(BigInteger val):做取余运算
public BigInteger[] divideAndReminder(BigInteger val):使用数组返回余数和商
其他的还有如pow(),negate(),shiftLeft()方法等,分别能够实现次方,取反等操作。

7.4.2 BigDecimal类

BigInteger类和BigDecimal类都能够实现大数字的运算,不同的是BigDecimal类中加入了小数的概念。
BigDecimal类常用的构造方法为:
BigDecimal bigDec = new BigDecimal(double val)
BigDecimal bigDec = new BigDecimal(String val)

同样的,在BigDecimal类中也存在着一些数值计算的常用方法,如加减乘除——add(),substract(),multiply()和divide()方法等。在这些方法中,除法操作是最为复杂的,因为在除不尽的时候末位的处理是需要考虑的:
public BigDecimal divide(BigDecimal disivor , int scale , int roundingMode)
其中三个参数分别为除数,小数点后的位数,近似处理模式

在除法中有多种近似处理模式

模式 含义
BigDecimal.ROUND_UP 商的最后一位大于零则向前进位
BigDecimal.ROUND_DOWN 商的最后一位均忽略
BigDecimal.ROUND_CEILING 正数则按照ROUND_UP处理;负数则按照ROUND_DOWN处理
BigDecimal.ROUND_FLOOR 与ROUND_CEILING处理方法相反,会使近似值小于实际值
BigDecimal.ROUND_HALF_DOWN 对最后一位进行四舍五入操作,小于等于5则舍弃
BigDecimal.ROUND_HALF_UP 对最后一位进行四舍五入操作,小于5则舍弃
BigDecimal.ROUND_HALF_EVEN 商的倒数第二位是奇数,则按照ROUND_HALF_UP处理;若商的倒数第二位为偶数,则按照ROUNG_HALF_DOWN处理。如7.5≈8;8.5≈8

本部分对Java中数字处理——包括数学运算,数字格式,随机数等——进行了一些基本介绍,这些在实际应用中会比较频繁的使用,建议熟练掌握。

你可能感兴趣的:(Java)