目录
在解决实际问题时,对数字的处理时十分普遍的,如数字问题、随机问题、商业货币问题、科学计数问题等。为了应对上述问题,java提供了处理相关问题的类。
9.1数字格式化
在java中没有格式化的数据遵循以下原则:
由于上述输出格式不能满足解决实际问题的需求,通常将结果格式化为指定格式形式后输出。在java中使用DecimalFormat类进行格式化操作。一般情况下可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配。下表列举了格式化模板中的特殊字符:
9.2数字运算
java提供了一个执行基本数学运算的Math类,该类包括常用的数学运算方法,如三角函数方法、指数函数方法等。除此之外还提供了一些数学常量,如PI、E等。
9.2.1Math类
在Math类中提供了众多数学函数方法,主要包括三角函数方法、指数函数方法等。这些方法都被定义为static形式,可以使用如下形式调用:
在Math类中除了函数方法外还存在一些数学常量,如PI、E等。这些数学常量作为Math类的成员变量出现,调用起来很简单。可以使用如下形式调用:
9.2.2常用数学运算方法
(1)三角函数方法
以上每个方法的参数和返回值都是double型的。除此之外,Math还提供了角度和弧度相互转换的方法toRadians()和toDegrees(),但是要注意角度和弧度的转换通常是不准确的。
(2)指数函数方法
(3)取整函数方法
在Math类中主要包括以下几种取整方法:
(4)取最大值、最小值、绝对值函数方法
9.3随机数
在java中提供了两种方式产生随机数,分别为调用Math类的random()方法和Random类提供的产生各种类型随机数的方法。
9.3.1Math.random()方法
在Math类中存在random()方法,用于产生随机数字,这个方法默认生成大于等于0.0小于1.0的double型随机数,即0.0=<Math.random() <1.0。虽然这个方法只可以产生0~1的随机数,但是只要在语句上稍加处理,就可以使用这个方法产生任意范围的随机数。如下图:
使用Math类的random()方法也可以生成随机字符,如:
进而推理出求任意两个字符之间的随机字符:
9.3.2Random类
除了Math类中的random()方法产生随机数外,java.util.Random类也可以通过创建对象来生成一个随机数生成器。语法如下:
以这种方式例化对象时,编译器以当前的系统时间作为随机数生成器的种子。此外,也可以在实例化Random对象时,设置随机数生成器的种子,语法如下:
在Random类中提供了获取各种数据类型随机数的方法,如下:
9.4大数字运算
在java中提供了大数字的操作类,即java.math.BigInteger类与java.math.BigDecimal类。这两个类用于高精度计算,其中BigInteger是针对大整数处理的类,而BigDecimal则是针对大小数的处理类。
9.4.1BigInteger类
BigInteger类型的数字范围较Integer的数字范围要大得多。前文介绍过Integer是int的包装类,int的最大值为2^31-1,如果要处理更大的数,使用Integer类型数据就无法实现了,所以java中提供了BigInteger类来处理更大的数字。
BigInteger类具有很多构造函数,但最直接的一种就是参数以字符串的形式代表要处理的数字,语法如下:
如果将2转换为BigInteger类型,可以使用下面的语句进行初始化;
注意,2的双引号不能省略,因为参数是以字符串的形式存在的。
一旦创建了对象实例,就可以调用BigInteger类中的一些方法进行运算操作,下面列举了几种运算方法:
在上面实例中需要注意的是divideAndRemainder()方法,这个方法做除法操作,以数组的形式返回,数组中的第一个值为除法的商,第二个值为余数。
9.4.2BigDecimal
BigDecimal加入了小数的概念,支持任何精度的定点数,可以用它来精确计算货币值。
在BigDecimal类中常用的两个构造方法如下:
在上述方法中divide()方法的近似处理模式有多种设置方式,这些模式的名称与含义如下表所示: