java的数学类使用

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

目次
一、Math类 
二、BigDecimal
三、BigInteger
四、DecimalFormat数字格式化

一、Math类 

  1. // 自然指数
  2. System.out.println(Math.E); // 2.718281828459045
  3. // 圆周率
  4. System.out.println(Math.PI); // 3.141592653589793
  5. // 求绝对值
  6. System.out.println(Math.abs(-3)); // 3
  7. // 求立方根
  8. System.out.println(Math.cbrt(27)); // 3.0
  9. // 向上取整
  10. System.out.println(Math.ceil(-3.4));  // -3.0
  11. // 向下取整
  12. System.out.println(Math.floor(-3.7)); // -4.0
  13. // 四舍五入
  14. System.out.println(Math.round(3.57)); // 4
  15. // 最大值
  16. System.out.println(Math.max(10,20)); // 20
  17. // 最小值
  18. System.out.println(Math.min(10,20)); // 10
  19. // 加权函数  a的b次方
  20. System.out.println(Math.pow(2,10)); // 1024.0
  21. // 随机数  [0,1)
  22. System.out.println(Math.random()); // 0.5776188237170176
  23. // 平方根
  24. System.out.println(Math.sqrt(16)); // 4.0
复制代码
二、BigDecimal

必要精确计算时(财政、金融),要求参数以字符串形式传递,底层使用按位运算。
  1. double b = 3.14;
  2. double b1 = 5.0;
  3. // 无限循环小数和无限不循环小数无法存储,没办法精确表示小数 (10/3.0)
  4. // 默认java中无法精确计算
  5. System.out.println(b1 - b); // 1.8599999999999999
  6. System.out.println(String.format("%.2f", b1 - b)); // 1.86
复制代码
NaN:判断是否是非数字
  1. double b = 3.14;
  2. System.out.println(Double.isNaN(d1));
复制代码
        BigDecimal用于计算精确的类,传入的值应当是字符串,假如使用数字(如 double、float、long)来创建BigDecimal实例时,这些数字起首会按照它们各自的数据范例举行处置惩罚,然后转换为 BigDecimal。
        但是,由于double和float是基于IEEE 754尺度的浮点数表现,它们不能精确表现全部的小数,尤其是那些无穷循环或非常长的小数。因此,使用double或float构造BigDecimal时,可能会遇到精度丢失的问题。
  1. BigDecimal bigDecimal = new BigDecimal(2.0);
  2. BigDecimal bigDecimal2 = new BigDecimal(1.99);
  3. System.out.println(bigDecimal.subtract(bigDecimal2));
  4. // 0.0100000000000000088817841970012523233890533447265625
复制代码
        使用字符串(String)来构造BigDecimal实例时,可以避免由于浮点数表现不准确而带来的精度问题。字符串表现的小数在转换为BigDecimal时,会按照字符串中的精确值来构造,不会有任何精度的丢失。
  1. BigDecimal bigDecimal3 = new BigDecimal("3.0");
  2. BigDecimal bigDecimal4 = new BigDecimal("1.5");
  3. // 差法
  4. System.out.println("差:" + bigDecimal3.subtract(bigDecimal4));
  5. // 加法
  6. System.out.println("加:" + bigDecimal3.add(bigDecimal4));
  7. // 乘法
  8. System.out.println("乘:" + bigDecimal3.multiply(bigDecimal4));
  9. // 除法
  10. System.out.println("除:" + bigDecimal3.divide(bigDecimal4));
  11. // 如果除不尽会报错:
  12. Exception in thread "main" java.lang.ArithmeticException:
  13. Non-terminating decimal expansion; no exact representable decimal result.
  14.         at java.base/java.math.BigDecimal.divide(BigDecimal.java:1736)
复制代码
三、BigInteger

BigInteger 用于存储和计算非常大的整数。
  1. // 大十进制  大量数字的存储和计算
  2. BigInteger bigInteger1 = new BigInteger("149257915");
  3. BigInteger bigInteger2 = new BigInteger("4179127477");
  4. System.out.println(bigInteger1.multiply(bigInteger2));
复制代码
四、DecimalFormat数字格式化

  1. double d = 73.98 * 0.85;
  2. System.out.println(d); // 62.883
复制代码
使用DecimalFormat可以指定命据的显示格式,DecimalFormat.format()方法可以举行四舍五入,用0代表占位,表现一位数字。假如没有数字,用0代替。
  1. // 四舍五入
  2. DecimalFormat decimalFormat = new DecimalFormat("0.00");
  3. System.out.println(decimalFormat.format(d));  // 62.88
  4. DecimalFormat decimalFormat1 = new DecimalFormat("0.0");
  5. System.out.println(decimalFormat1.format(d)); // 62.9
  6. // 用0补位
  7. DecimalFormat decimalFormat2 = new DecimalFormat("0.00000");
  8. System.out.println(decimalFormat2.format(d)); // 62.88300
  9. DecimalFormat decimalFormat3 = new DecimalFormat("000.00000");
  10. System.out.println(decimalFormat3.format(d)); // 062.88300
  11. // # 代表占位,表示一位数字。如果这一位没有数字,那么就不填充
  12. // 0.#0 明显不符合常识,不能使用
  13. double d1 = 10.09 * 0.85;
  14. DecimalFormat decimalFormat4 = new DecimalFormat("#0.00");
  15. System.out.println(decimalFormat4.format(d1)); // 8.58
  16. // 科学计数法
  17. DecimalFormat decimalFormat5 = new DecimalFormat("0.00E0");
  18. System.out.println(decimalFormat5.format(d1)); // 8.58E0  表示8.58乘以10的1次方
  19. DecimalFormat decimalFormat6 = new DecimalFormat("0.000E0");
  20. System.out.println(decimalFormat6.format(d1)); // 8.508E0  表示8.508乘以10的1次方
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表