Math
Math.round(x) //四舍五入
Math.floor() //向下取整
Math.ceil() //向上取整
Math.min(x,y) //返回2个数中小的一个
Math.max(x,y) //返回大的一个
Math.random() //返回一个[0,1)之间的伪随机数
BigDecimal
/是整除,如果2个操作数都是整数,则结果舍弃小数部分、只取整;只要有1个操作数是浮点数,结果就是浮点数。
计算机表示浮点数容易产生误差,不精确,Bigdecimal类可以精确表示浮点数,并进行精确的四则运算
// 以下2种方式创建的才是精确的
BigDecimal db1=new BigDecimal("1.23"); //参数是String类型
BigDecimal db2=BigDecimal.valueOf(1.23) //参数是数值型
// BigDecimal类提供了加减乘除的方法,可以进行精确的四则运算
// add 加,subtract 减,multiply 乘,divide 除
BigDecimal db3=db1.add(db2);
// 转换为数值型,xxxValue()
double d=db3.doubleValue();
NumberFormat
NumberFormat类可以格式化数字
NumberFormat nf1 = NumberFormat.getCurrencyInstance(Locale.CHINA); //获取指定国家的货币格式,比如中国是¥,美国是$,参数为Locale类的常量
NumberFormat nf2 = NumberFormat.getIntegerInstance(); //整型数字格式,如果含有小数,先四舍五入转换为整数
NumberFormat nf3 = NumberFormat.getNumberInstance(); //通用数字格式,可以格式化所有类型的数字,保留原值、不四舍五入
// 格式化数字,返回字符串。从末尾起,每3位加一个逗号
String str1 = nf1.format(12345); //"¥12,345"
String str2 = nf2.format(12345); //"12,345"
String str3 = nf3.format(12345.678); //"12,345.678"
// 将格式字符串转换为数值,返回Number类型
try {
Number n1 = nf1.parse(str1); //12345
Number n2 = nf2.parse(str2); //12345
Number n3 = nf3.parse(str3); //12345.678
} catch (ParseException e) {
e.printStackTrace();
}
Random、ThreadLocalRandom
Random、ThreadLocalRandom2个类用来随机生成数字、布尔值。
Random random1 = new Random(); //默认以当前时间戳作为种子
Random random2 = new Random(1212121122323232L); //设置种子
int next = random1.nextInt(10); //返回[0,10)内的一个随机整数
int i = random1.nextInt(); //返回int范围内的一个随机整数
boolean b = random1.nextBoolean(); //随机生成布尔值
// ThreadLocalRandom是Random的加强版,在并发环境下资源占用更少,并且可以设置范围的下限
ThreadLocalRandom random = ThreadLocalRandom.current();
生成的数字均是伪随机数,如果使用同一个种子,则生成的随机数相同。
String、StringBuilder、StringBuffer
String str="hello";
String不可变,修改字符串是在副本上操作,原串不变。
不可变指的是“hello”这个字符串不可变,不能修改“hello”这个字符串,但变量str是可变的、可修改的。
StringBuffer、StringBuilder都是可变的,修改字符串是在原串上操作,原串改变。
StringBuffer线程安全,StringBuilder线程不安全。StringBuffer为保证线程安全,有额外的开销,所以StringBuilder效率更高。
记法:有红buff加成,打架更安全;还在刷装备尚未成型(builder),不安全。