目录
一、BigDecimal(高精度的浮点数运算)
1.1、ROUND_UP
1.2、ROUND_DOWN
1.3、ROUND_CEILING
1.4、ROUND_FLOOR
1.5、ROUND_HALF_UP
1.6、ROUND_HALF_DOWN
1.7、ROUND_HALF_EVEN 银行家舍入法
1.8、ROUND_UNNECESSARY
二、Biginteger(高精度的整数运算)
三、Math.random()方法
四、Math类(精度要求比较高的运算不适合)
五、数字格式化
以下例子为保留小数点1位,那么这种舍入方式下的结果。
1.15>1.2 1.25>1.2
public BigDecimal div(double value1, double value2) {
return div(value1, value2, location); // 调用自定义除法方法
}
// 定义除法方法,参数分别为除数与被除数以及商小数点后的位数
public BigDecimal div(double value1, double value2, int b) {
if (b < 0) {
System.out.println("b值必须大于等于0");
}
BigDecimal b1 = new BigDecimal(Double.toString(value1));
BigDecimal b2 = new BigDecimal(Double.toString(value2));
// 调用除法方法,商小数点后保留b位,并将结果进行四舍五入操作
return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);
}
public static void main(String[] args) {
cc b = new cc();
System.out.println("两个数字相加结果:" + b.add(-7.5, 8.9));
System.out.println("两个数字相减结果:" + b.sub(-7.5, 8.9));
System.out.println("两个数字相乘结果:" + b.mul(-7.5, 8.9));
System.out.println("两个数字相除结果,结果小数后保留10位:"+b.div(10, 2));
System.out.println("两个数字相除,保留小数后5位:"+b.div(-7.5,8.9, 5));
}
public static BigDecimal div(double value1,double value2,int b,int r){
if(b<0){
System.out.println("b值必须大于等于0");
}
BigDecimal b1=new BigDecimal(Double.toString(value1));
BigDecimal b2=new BigDecimal(Double.toString(value2));
return b1.divide(b2,b,r);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
UseCase u=new UseCase();
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_CEILING));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_DOWN));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_FLOOR));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_HALF_DOWN));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_HALF_EVEN));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_HALF_UP));
System.out.println(u.div(-7.5,8.9,5,BigDecimal.ROUND_UP));
}
BigInteger bigInstance = new BigInteger("4"); // 实例化一个大数字
// 取该大数字加2的操作
System.out.println("加法操作:" + bigInstance.add(new BigInteger("2")));
// 取该大数字减2的操作
System.out.println("减法操作:"
+ bigInstance.subtract(new BigInteger("2")));
// 取该大数字乘以2的操作
System.out.println("乘法操作:"
+ bigInstance.multiply(new BigInteger("2")));
// 取该大数字除以2的操作
System.out.println("除法操作:"
+ bigInstance.divide(new BigInteger("2")));
// 取该大数字除以3的商
System.out.println("取商:"
+ bigInstance.divideAndRemainder(new BigInteger("3"))[0]);
// 取该大数字除以3的余数
System.out.println("取余数:"
+ bigInstance.divideAndRemainder(new BigInteger("3"))[1]);
// 取该大数字的2次方
System.out.println("做2次方操作:" + bigInstance.pow(2));
// 取该大数字的相反数
System.out.println("取相反数操作:" + bigInstance.negate());
用于的产生随机数,产生的随机数0 public static int GetEvenNum(double num1, double num2) {
// 产生num1~num2之间的随机数
int s = (int) num1 + (int) (Math.random() * (num2 - num1));
if (s % 2 == 0) { // 判断随机数是否为偶数
return s; // 返回
} else
// 如果是奇数
return s + 1; // 将结果加1后返回
}
public static void main(String[] args) {
System.out.println("任意一个2~32之间的偶数:" + GetEvenNum(2, 11));
random类(Java.util.Random)
通过实例化一个Random对象创建一个随机数生成器
Random r = new Random(); // 实例化一个Random类
// 随机产生一个整数
System.out.println("随机产生一个整数:" + r.nextInt());
// 随机产生一个大于等于0小于10的整数
System.out.println("随机产生一个大于等于0小于10的整数:" + r.nextInt(10));
// 随机产生一个布尔型的值
System.out.println("随机产生一个布尔型的值:" + r.nextBoolean());
// 随机产生一个双精度型的值
System.out.println("随机产生一个双精度型的值:" + r.nextDouble());
// 随机产生一个浮点型的值
System.out.println("随机产生一个浮点型的值:" + r.nextFloat());
// 随机产生一个概率密度为高斯分布的双精度值
System.out.println("随机产生一个概率密度为高斯分布的双精度值:"
+ r.nextGaussian());
}
四、Math类(精度要求比较高的运算不适合)
math类中提供了众多函数方法// 取90度的正弦
System.out.println("90度的正弦值:" + Math.sin(Math.PI / 2));
System.out.println("0度的余弦值:" + Math.cos(0)); // 取0度的余弦
// 取60度的正切
System.out.println("60度的正切值:" + Math.tan(Math.PI / 3));
// 取2的平方根与2商的反正弦
System.out.println("2的平方根与2商的反弦值:"
+ Math.asin(Math.sqrt(2) / 2));
// 取2的平方根与2商的反余弦
System.out.println("2的平方根与2商的反余弦值:"
+ Math.acos(Math.sqrt(2) / 2));
System.out.println("1的反正切值:" + Math.atan(1)); // 取1的反正切
System.out.println("e的平方值:" + Math.exp(2)); // 取e的2次方
// 取以e为底2的对数
System.out.println("以e为底2的对数值:" + Math.log(2));
// 取以10为底2的对数
System.out.println("以10为底2的对数值:" + Math.log10(2));
System.out.println("4的平方根值:" + Math.sqrt(4)); // 取4的平方根
System.out.println("8的立方根值:" + Math.cbrt(8)); // 取8的立方根
System.out.println("2的2次方值:" + Math.pow(2, 2)); // 取2的2次方
// 返回第一个大于等于参数的整数
System.out.println("使用ceil()方法取整:" + Math.ceil(5.2));
// 返回第一个小于等于参数的整数
System.out.println("使用floor()方法取整:" + Math.floor(2.5));
// 返回与参数最接近的整数
System.out.println("使用rint()方法取整:" + Math.rint(2.7));
// 返回与参数最接近的整数
System.out.println("使用rint()方法取整:" + Math.rint(2.5));
// 将参数加上0.5后返回最接近的整数
System.out.println("使用round()方法取整:" + Math.round(3.4f));
// 将参数加上0.5后返回最接近的整数,并将结果强制转换为长整型
System.out.println("使用round()方法取整:" + Math.round(2.5));
}
System.out.println("4和8较大者:" + Math.max(4, 8));
// 取两个参数的最小值
System.out.println("4.4和4较小者:" + Math.min(4.4, 4));
System.out.println("-7的绝对值:" + Math.abs(-7)); // 取参数的绝对值
五、数字格式化
//实例化对象时设置格式化模式(默认模式)
static public void SimgleFormat(String pattern,double value){
DecimalFormat MyFormat = new DecimaFormat(pattern);
String output = MyFormat.format(value); //将数字格式化
System.out.printIn(value +"" +pattern + "" +output);
}
//使用applyPattern()方法对数字进行格式化 指定模式
static public void UseApplyPattern(String pattern,double value){
DecimalFormat MyFormat = new DecimalFormat();//实例化DecimalFormat对象
MyFormat.applyPattern(pattern);
System.out.println(value + " " + pattern + " " + myFormat.format(value));
}
//在mian主函数中调用
public static void main(String[] args){
SimgleFormat("###.###",1243.2145);
SimgleFormat("00000000.###kg", 123456.789); // 在数字后加上单位
// 按照格式模板格式化数字,不存在的位以0显示
SimgleFormat("000000.000", 123.78);
UseApplyPattern("#.###%",0.789); //将数字转化为百分数
("###.##", 123456.789); // 将小数点后格式化为两位
("0.00\u2030", 0.789); // 将数字转化为千分数形式
}
DecimalFormat myFormat = new DecimalFormat();
myFormat.setGroupingSize(2); // 设置将数字分组为2
String output = myFormat.format(123456.789);
System.out.println("将数字以每两个数字分组 " + output);
myFormat.setGroupingUsed(false); // 设置不允许数字进行分组
String output2 = myFormat.format(123456.789);
System.out.println("不允许数字分组 " + output2);