java的数学类使用
目次一、Math类
二、BigDecimal
三、BigInteger
四、DecimalFormat数字格式化
一、Math类
// 自然指数
System.out.println(Math.E); // 2.718281828459045
// 圆周率
System.out.println(Math.PI); // 3.141592653589793
// 求绝对值
System.out.println(Math.abs(-3)); // 3
// 求立方根
System.out.println(Math.cbrt(27)); // 3.0
// 向上取整
System.out.println(Math.ceil(-3.4));// -3.0
// 向下取整
System.out.println(Math.floor(-3.7)); // -4.0
// 四舍五入
System.out.println(Math.round(3.57)); // 4
// 最大值
System.out.println(Math.max(10,20)); // 20
// 最小值
System.out.println(Math.min(10,20)); // 10
// 加权函数a的b次方
System.out.println(Math.pow(2,10)); // 1024.0
// 随机数[0,1)
System.out.println(Math.random()); // 0.5776188237170176
// 平方根
System.out.println(Math.sqrt(16)); // 4.0 二、BigDecimal
必要精确计算时(财政、金融),要求参数以字符串形式传递,底层使用按位运算。
double b = 3.14;
double b1 = 5.0;
// 无限循环小数和无限不循环小数无法存储,没办法精确表示小数 (10/3.0)
// 默认java中无法精确计算
System.out.println(b1 - b); // 1.8599999999999999
System.out.println(String.format("%.2f", b1 - b)); // 1.86 NaN:判断是否是非数字
double b = 3.14;
System.out.println(Double.isNaN(d1)); BigDecimal用于计算精确的类,传入的值应当是字符串,假如使用数字(如 double、float、long)来创建BigDecimal实例时,这些数字起首会按照它们各自的数据范例举行处置惩罚,然后转换为 BigDecimal。
但是,由于double和float是基于IEEE 754尺度的浮点数表现,它们不能精确表现全部的小数,尤其是那些无穷循环或非常长的小数。因此,使用double或float构造BigDecimal时,可能会遇到精度丢失的问题。
BigDecimal bigDecimal = new BigDecimal(2.0);
BigDecimal bigDecimal2 = new BigDecimal(1.99);
System.out.println(bigDecimal.subtract(bigDecimal2));
// 0.0100000000000000088817841970012523233890533447265625 使用字符串(String)来构造BigDecimal实例时,可以避免由于浮点数表现不准确而带来的精度问题。字符串表现的小数在转换为BigDecimal时,会按照字符串中的精确值来构造,不会有任何精度的丢失。
BigDecimal bigDecimal3 = new BigDecimal("3.0");
BigDecimal bigDecimal4 = new BigDecimal("1.5");
// 差法
System.out.println("差:" + bigDecimal3.subtract(bigDecimal4));
// 加法
System.out.println("加:" + bigDecimal3.add(bigDecimal4));
// 乘法
System.out.println("乘:" + bigDecimal3.multiply(bigDecimal4));
// 除法
System.out.println("除:" + bigDecimal3.divide(bigDecimal4));
// 如果除不尽会报错:
Exception in thread "main" java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result.
at java.base/java.math.BigDecimal.divide(BigDecimal.java:1736) 三、BigInteger
BigInteger 用于存储和计算非常大的整数。
// 大十进制大量数字的存储和计算
BigInteger bigInteger1 = new BigInteger("149257915");
BigInteger bigInteger2 = new BigInteger("4179127477");
System.out.println(bigInteger1.multiply(bigInteger2)); 四、DecimalFormat数字格式化
double d = 73.98 * 0.85;
System.out.println(d); // 62.883 使用DecimalFormat可以指定命据的显示格式,DecimalFormat.format()方法可以举行四舍五入,用0代表占位,表现一位数字。假如没有数字,用0代替。
// 四舍五入
DecimalFormat decimalFormat = new DecimalFormat("0.00");
System.out.println(decimalFormat.format(d));// 62.88
DecimalFormat decimalFormat1 = new DecimalFormat("0.0");
System.out.println(decimalFormat1.format(d)); // 62.9
// 用0补位
DecimalFormat decimalFormat2 = new DecimalFormat("0.00000");
System.out.println(decimalFormat2.format(d)); // 62.88300
DecimalFormat decimalFormat3 = new DecimalFormat("000.00000");
System.out.println(decimalFormat3.format(d)); // 062.88300
// # 代表占位,表示一位数字。如果这一位没有数字,那么就不填充
// 0.#0 明显不符合常识,不能使用
double d1 = 10.09 * 0.85;
DecimalFormat decimalFormat4 = new DecimalFormat("#0.00");
System.out.println(decimalFormat4.format(d1)); // 8.58
// 科学计数法
DecimalFormat decimalFormat5 = new DecimalFormat("0.00E0");
System.out.println(decimalFormat5.format(d1)); // 8.58E0表示8.58乘以10的1次方
DecimalFormat decimalFormat6 = new DecimalFormat("0.000E0");
System.out.println(decimalFormat6.format(d1)); // 8.508E0表示8.508乘以10的1次方
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]