数学工具类:Math,高精度计算和数字格式化
- 数学工具类:Math
- 常用方法:
- 随机数类:Random
- 高精度计算类:DigDecimal
- 构造方法
- 常用方法
- 关于小数的舍入模式
- 数字格式化:NumberFormat
- 构造方法
- 常用方法
- 自定义数字格式化类:DecimalFormat
- 构造方法
- 数字转字符串:format()
- 字符串转数字:parse()
数学工具类:Math
- Math 类包含基本的数字操作,如指数、对数、平方根和三角函数;Math中方法和常量都是静态的,因此可以通过类名直接调用
常用方法:
常用的方法:
•static double abs(double a); //有重载方法 绝对值
•static double ceil(double a); //有重载方法 向上取整(只要有小数部分不为0,就进1
•static double floor(double a); //有重载方法 向下取整(只要有小数部分不为0,就不进1
•static long round(double a); //有重载方法 四舍五入
•static double pow(double a, double b); //次方
•static double random();//随机数
•static double max(double a,double b);//求两数的大值
•static double min(double a,double b);//求两数的小值
随机数类:Random
创建:
Random ra = new Random();
使用:
int i = ra.nextInt(); //取值范围
高精度计算类:DigDecimal
- 当我们计算小数的时候,很多时候得不到准确的值
double a = 0.3;
double b = 3;
double c = a*b;
System.out.println(c); //0.8999999999999999
- 这个时候就需要使用java的高精度计算类:BigDecimal
构造方法
BigDecimal bd = new BigDecimal("0.3");
BigDecimal bd2 = new BigDecimal(3.0);
常用方法
常用方法:
•BigDecimal add(BigDecimal augend); // 加法
BigDecimal add = bd.add(bd2);
•BigDecimal subtract(BigDecimal subtrahend); // 减法
BigDecimal subtract = bd.subtract(bd2);
•BigDecimal multiply(BigDecimal multiplicand); //乘法
BigDecimal multiply = bd.multiply(bd2);
•BigDecimal divide(BigDecimal divisor); // 除
BigDecimal divide = bd.divide(bd2);
重载: BigDecimal divide(divisor, scale, roundingMode)
divisor:除数
scale:位数
roundingMode:舍入模式:
•BigDecimal setScale(int newScale, int roundingMode);
保留小数位 位数,舍入模式
//保留小数位(newScale:保留几位小数,roundingMode:舍入模式)
BigDecimal setScale(int newScale, int roundingMode)
//取余运算
BigDecimal remainder(BigDecimal divisor);
//求相反数
BigDecimal negate();
//比较大小(左边比右边数大返回1,相等返回0,比右边小返回-1)
int compareTo(BigDecimal val);
//将BigDecimal对象中的值以整数返回
int intValue()
//将BigDecimal对象中的值以double类型返回
double doubleValue()
//将BigDecimal对象中的值以float类型返回
float floatValue()
//将BigDecimal对象中的值以long类型返回
long longValue()
//将BigDecimal对象中的值以String类型返回
String toString()
关于小数的舍入模式
BigDecimal中的divide(BigDecimal divisor, int scale, int roundingMode) 方法,需要用到舍入模式。
ROUND_CEILING(往右靠近): 舍位时往正无穷方向移动 1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -1 -1.5-> -1 -1.8-> -1
ROUND_DOWN(往0靠近,正数全舍,负数进1):向0的方向移动1.1-> 1 1.5-> 1 1.8-> 1 -1.1-> -1 -1.5-> -1 -1.8> -1
ROUND_FLOOR(往左靠近):与CEILING相反,往负无穷 1.1-> 1 1.5-> 1 1.8-> 1 -1.1-> -2 -1.5-> -2 -1.8-> -2
ROUND_HALF_DOWN(五舍六入):以5为分界线,或曰五舍六入1.5-> 1 1.6-> 1 -1.5-> -1 -1.6-> -2
ROUND_HALF_EVEN(前一位是偶数五舍去,前一位是奇数,五进1):同样以5为分界线,如果是5,则前一位变偶数1.15-> 1.2 1.16-> 1.2 1.25-> 1.2 1.26-> 1.3
ROUND_HALF_UP(四舍五入):最常见的四舍五入
UNNECESSARY:无需舍位
ROUND_UP:与ROUND_DOWN,远离0的方向1.1-> 2 1.5-> 2 1.8-> 2 -1.1-> -2 -1.5-> -2 -1.8-> -2
数字格式化:NumberFormat
采用单例模式实现
构造方法
static NumberFormat getInstance();
NumberFormat nf = NumberFormat.getInstance();
常用方法
•void setMaximumFractionDigits(int newValue),//设置最大小数保留位数
•void setMinimumFractionDigits(int newValue)//设置最小小数保留位数
•void setMaximumIntegerDigits(int newValue)//设置最大整数保留位数
•void setMinimumIntegerDigits(int newValue)//设置最小整数保留位数
•String format(long number) //格式化给定数字
•Number parse(String source) //解析为数字
自定义数字格式化类:DecimalFormat
构造方法
•DecimalFormat(String pattern)
DecimalFormat df = new DecimalFormat("格式");
#:表示此位置可有可无
0:占位符,此位置必须有数字
%:此数字以百分比表示
数字转字符串:format()
DecimalFormat df = new DecimalFormat("0.0%");
double d = 0.42;
String format = df.format(d);
System.out.println(format);
字符串转数字:parse()
try {
Double parse = (Double)df.parse(format);
System.out.println(parse);
} catch (ParseException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}