通常都认为java8新功能主要包括函数式编程及lambda表达式。然而,除了那些大的特点之外,还有其他的,影响力小却很有趣,大多时候不为人所知,甚至不太被人评论。

本文我们列举java.lang.Math类中新增的方法,并给一些小的示例来说明。

*exact() 方法

首先看一组扩展已经存在的常用算术操作方法,从名称及可以知其意,处理实现原有功能外,还增加了当结果溢出时抛出异常。这些方法可以使用integer和long类型作为参数。

addExact()

返回两个参数之和,结果溢出时抛出ArithmeticException 异常:

Math.addExact(100, 50); // returns 150

Math.addExact(Integer.MAX_VALUE, 1); // throws ArithmeticException

substractExact()方法

返回两个参数之差,结果溢出时抛出ArithmeticException 异常:

Math.subtractExact(100, 50); // returns 50

Math.subtractExact(Long.MIN_VALUE, 1); // throws ArithmeticException

incrementExact()方法

返回参数值加一,结果溢出时抛出ArithmeticException 异常:

Math.incrementExact(100); // returns 101

Math.incrementExact(Integer.MAX_VALUE); // throws ArithmeticException

decrementExact()方法

返回参数值减一,结果溢出时抛出ArithmeticException 异常:

Math.decrementExact(100); // returns 99

Math.decrementExact(Long.MIN_VALUE); // throws ArithmeticException

multiplyExact()方法

返回两个参数之积,结果溢出时抛出ArithmeticException 异常:

Math.multiplyExact(100, 5); // returns 500

Math.multiplyExact(Long.MAX_VALUE, 2); // throws ArithmeticException

negateExact()方法

改变参数符号,结果溢出时抛出ArithmeticException 异常。我们来看看值在内存中的表示,并理解为什么会溢出,因为并不像其他exact方法那么直观看出来:

Math.negateExact(100); // returns -100

Math.negateExact(Integer.MIN_VALUE); // throws ArithmeticException

第二个示例需要解释下,因为不能一眼看出来:溢出是因为Integer.MIN_VALUE 是 −2.147.483.648,而Integer.MAX_VALUE 是 2.147.483.647,所以返回值超出整数范围。

其他方法

floorDiv()

第一个参数除以第二参数,然后针对结果执行floor操作,返回小于或等于商的整数:

Math.floorDiv(7, 2)); // returns 3

商为 3.5 ,所以 floor(3.5) == 3.

让我们看另一个示例:

Math.floorDiv(-7, 2)); // returns -4

商为-3.5 ,所以 floor(-3.5) == -4.

modDiv()方法

该方法与前面floorDiv()方法类似, 但在模数或余数上应用floor() 操作,而不是商:

Math.modDiv(5, 3)); // returns 2

我们看到 , modDiv() 方法两个参数为正数,和 % 操作符效果一样。让看看另一个不同示例:

Math.modDiv(-5, 3)); // returns 1

结果为 1 而不是 2 ,因为floorDiv(-5, 3) 是 -2 ,而不是 -1.

nextDown()方法

返回参数直接较低的值(支持 float 或 double 参数):

float f = Math.nextDown(3); // returns 2.9999998

double d = Math.nextDown(3); // returns 2.999999761581421

总结

我们描述了java8中java.lang.Math类中所有新的方法,并通过示例给与解释说明。

补充知识:math类常用方法详细总结

说明:Math 类位于 java.lang 包中,主要提供了一些常用的数学函数和计算

备注:一些在工程计算中才用的方法此处不做介绍

一、取整运算

1、Math.ceil(double x)

释义:向上取整,返回大于该值的最近 double 值

System.out.println(Math.ceil(1.23)); // 2.0

System.out.println(Math.ceil(-1.23)); // -1.0

2、Math.floor(double x)

释义:向下取整,返回小于该值的最近 double 值

System.out.println(Math.floor(1.23)); // 1.0

System.out.println(Math.floor(-1.23)); // -2.0

3、Math.round(double x)

释义:四舍五入取整,参数类型:double、float

System.out.println(Math.round(1.43)); // 1

System.out.println(Math.round(1.53)); // 2

System.out.println(Math.round(-1.43)); // -1

System.out.println(Math.round(-1.53)); // -2

二、随机运算

Math.random()

释义:内部调用了 Random.nextDouble() 方法,生成一个伪均匀分布在 [0,1)之间的 double 值

System.out.println((int)(Math.random() * 10 + 1)); // 生成范围再[1, 11)之间的伪随机数

三、符号运算

1、Math.abs(int x)

释义:计算绝对值,参数类型:int、long、float、double

System.out.println(Math.abs(-1)); // 1

2、Math.negateExact(int x)

释义:计算相反值,参数类型:int、long

System.out.println(Math.negateExact(-1)); // 1

四、大小运算

1、Math.max(int x, int y)

释义:获取两个参数中的最大值,参数类型:int、long、float、double

System.out.println(Math.max(1, 2)); // 2

2、Math.min(int x, int y)

释义:获取两个参数中的最小值,参数类型:int、long、float、double

System.out.println(Math.min(1, 2)); // 1

3、Math.rint(double x)

释义:获取与参数最接近的double值

System.out.println(Math.rint(1.4)); // 1.0

System.out.println(Math.rint(1.5)); // 2.0

System.out.println(Math.rint(-1.4)); // -1.0

System.out.println(Math.rint(-1.5)); // -2.0

以上这篇java8 Math新增方法介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

java math mod_java8 Math新增方法介绍相关推荐

  1. JavaScript Math.random()方法介绍

    随机法 (Random Method) The JavaScript Math.random() method is an excellent built-in method for producin ...

  2. java基础---集合collection的方法介绍

    package com.henu;import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; / ...

  3. java rrdtool_rrdtool安装和使用方法介绍,利用rrdtool 进行数据的收集绘图统计,网页显示...

    rrdtool安装和使用方法介绍,利用rrdtool 进行数据的收集绘图统计,网页显示. RRDTOOL的绘图~ 所谓的"Round Robin" 其实是一种存储数据的方式,使用固 ...

  4. Java中Objects类的方法介绍(已更新)

    使用软件:eclipse 2019-2 jdk:11 首先,Objects类是属于Java的工具类,具体包的位置是java.Util.Objects.它是在jdk1.7版本中添加的一些用来检查的工具, ...

  5. java私有属性和私有方法_Java接口–历年来Java 9之旅–默认方法和私有方法

    java私有属性和私有方法 介绍 Java接口已经比Java版本进行了更多的演变,而Java 8和Java 9则有所发展.在本文中,我们将介绍接口在Java 8之前的样子以及如何在Java 8和Jav ...

  6. java解析Excel文件的方法

    java解析Excel文件的方法 介绍 1.1 pom依赖 1.2 将数据流转化为可解析的Workbook类型文件 1.3 解析 1.4 Controller层接收前端传递的Excel文件(前端使用E ...

  7. Java基础知识之equals方法

    <Java核心技术> 1.equals方法介绍以及重写 Object类中的equals方法是用于检测两个对象是否相等,在Object类中equals方法的具体实现是确定两个对象引用是否相等 ...

  8. java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...

    1.重载方法 上一篇文章用到的max方法只能用于int型数据类型,但是如果需要决定两个浮点数中哪个较大,解决方法是创建另一个方法名相同但参数不同的方法,代码如下: public static doub ...

  9. Java8 Math新增方法

    引用至:https://blog.csdn.net/neweastsun/article/details/79873698 java8 Math新增方法 通常都认为java8新功能主要包括函数式编程及 ...

最新文章

  1. 为什么要引入模式概念来设计软件
  2. 【长文】Google面试官分步解析自己泄漏前的面试题,超多干货和建议
  3. 收货地址 - 删除收货地址
  4. 腾讯全球数字生态大会进入倒计时,原生技术专场开放云报名
  5. JetBrains 加入 .NET 基金会
  6. python 字符ab+字符c 2_“ab”+”c”*2 结果是: (1.3分)_学小易找答案
  7. 【常见笔试面试算法题12续集三】动态规划算法案例分析3 LIS练习题(最长上升子序列)
  8. Vue 3.0暂缓发布,前端同学暂时舒了一口气
  9. C++ STL string修改
  10. 没错,支付也有个七层模型
  11. spark开发demo
  12. 光影精灵安装ubuntu20.04安装显卡驱动外界显示屏
  13. 云打码案例 python
  14. MySQL - 设计游戏用户信息表
  15. 对重装系统彻底说再见——电脑C盘备份
  16. Android 之路68---动画基础
  17. 浅谈企业文化的重要性,搭档之家有话说
  18. Windows server 2012服务器IIS配置过程
  19. MicroBlaze:按键中断的学习与测试实验
  20. [Python] replace函数

热门文章

  1. 【论文复现】使用RCNN进行文本分类
  2. apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API
  3. 尼克老湿の面试回顾(7)
  4. java连接设备连接给参数_如何通过蓝牙连接两个设备按参数发送配对代码? JAVA,Android的...
  5. matlab水蒸气焓值计算_焓变 反应热-化学选修4同步优质系列教案(人教版)
  6. 最新log4j2 远程代码执行漏洞(紧急扩散)
  7. 利用Linux搭建SVN服务器,详细过程
  8. CXF开发及与Spring整合开发
  9. multipart form-data boundary 说明
  10. java 前端导出exvel_java导出数据到Excel文件 前端进行下载