Random类
Random类是java中用于产生随机数的类,它有两个构造器
Random()//无参数,使用默认的数种生成伪随机数
Random(long seed) //使用指定的数种生成伪随机数
使用Random类生成伪随机数:
使用方法nextXxx()可以生成指定类型的随机数
其中nextInt方法可以指定范围
nextBytes(Byte[] Bytes) 则是生成一系列随机的Byte类型整数并存放于Byte数组Bytes中
nextGaussian()//返回随机生成的伪高斯数列中的下一个double类型的浮点数
BigDecimal类
BigDecimal类是java提供的大数字处理类,这个类解决了浮点类型数据计算时精度丢失的问题,使用BigDecimal类可以精确地对高精度数据进行运算
下面是BigDecimal类的使用方法
BigDecimal类的构造器
BigDecimal类的构造器有三个:
public BigDecimal(double val) //不推荐使用这个构造器,因为会出现精度丢失
public BigDecimal(String val) //以字符串形式将浮点数传入构造器
public static BigDecimal valueOf(double val) //这个构造器内部其实也是做了浮点数到字符串的转换
例:
package fgb;
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
BigDecimal bd1=new BigDecimal(0.05);//bd1将会出现精度丢失
BigDecimal bd2=new BigDecimal("0.05");
BigDecimal bd3=BigDecimal.valueOf(0.05);
System.out.println(bd1+"\n"+bd2+"\n"+bd3);
}
}
输出结果:
0.05000000000000000277555756156289135105907917022705078125
0.05
0.05
BigDecimal的精度(小数点后的位数)
scale方法,返回当前BigDecimal实例的小数位数(精度)
setScale方法,设置精度(和小数保留方式)
BigDecimal类的四则运算
public BigDecimal add(BigDecimal augend) //加法
public BigDecimal subtract(BigDecimal subtrahend) //减法
public BigDecimal multiply(BigDecimal multiplicand) //惩罚
public BigDecimal divide(BigDecimal divisor) //除法,注:若所得结果的精度超出可表示范围,系统则会抛出错误 Non-terminating decimal expansion; no exact representable decimal result.
其他重载divide方法还可以指定结果的精度以及小数的保留方式,可以截去超长的小数,将结果按指定方式报流程指定精度的小数
BigDecimal类的roundingMode(运算中小数保留的方式)
BigDecimal类的roundingMode(运算中小数保留的方式)
roundingMode是指BigDecimal类运算时保留小数的方式,setScale方法和divide方法都可以指定roundingMode
roundingMode有如下几种:
BigDecimal.ROUND_DOWN直接删除多余的小数位,如2.35会变成2.3
BigDecimal.ROUND_UP进位处理,2.35变成2.4
BigDecimal.ROUND_HALF_UP四舍五入,2.35变成2.4
BigDecimal.ROUND_HALF_DOWN五舍六入,2.35变成2.3,如果是5则向下舍
BigDecimal.ROUND_UP进位处理,2.35变成2.4
BigDecimal.ROUND_HALF_UP四舍五入,2.35变成2.4
BigDecimal.ROUND_HALF_DOWN五舍六入,2.35变成2.3,如果是5则向下舍
注:这些roundingMode都是BigDecimal类定义的静态变量,且为final变量