java8 Math新增方法介紹
通常都認(rèn)為java8新功能主要包括函數(shù)式編程及l(fā)ambda表達(dá)式。然而,除了那些大的特點(diǎn)之外,還有其他的,影響力小卻很有趣,大多時候不為人所知,甚至不太被人評論。
本文我們列舉java.lang.Math類中新增的方法,并給一些小的示例來說明。
*exact() 方法
首先看一組擴(kuò)展已經(jīng)存在的常用算術(shù)操作方法,從名稱及可以知其意,處理實(shí)現(xiàn)原有功能外,還增加了當(dāng)結(jié)果溢出時拋出異常。這些方法可以使用integer和long類型作為參數(shù)。
addExact()
返回兩個參數(shù)之和,結(jié)果溢出時拋出ArithmeticException 異常:
Math.addExact(100, 50); // returns 150
Math.addExact(Integer.MAX_VALUE, 1); // throws ArithmeticException
substractExact()方法
返回兩個參數(shù)之差,結(jié)果溢出時拋出ArithmeticException 異常:
Math.subtractExact(100, 50); // returns 50
Math.subtractExact(Long.MIN_VALUE, 1); // throws ArithmeticException
incrementExact()方法
返回參數(shù)值加一,結(jié)果溢出時拋出ArithmeticException 異常:
Math.incrementExact(100); // returns 101
Math.incrementExact(Integer.MAX_VALUE); // throws ArithmeticException
decrementExact()方法
返回參數(shù)值減一,結(jié)果溢出時拋出ArithmeticException 異常:
Math.decrementExact(100); // returns 99
Math.decrementExact(Long.MIN_VALUE); // throws ArithmeticException
multiplyExact()方法
返回兩個參數(shù)之積,結(jié)果溢出時拋出ArithmeticException 異常:
Math.multiplyExact(100, 5); // returns 500
Math.multiplyExact(Long.MAX_VALUE, 2); // throws ArithmeticException
negateExact()方法
改變參數(shù)符號,結(jié)果溢出時拋出ArithmeticException 異常。我們來看看值在內(nèi)存中的表示,并理解為什么會溢出,因?yàn)椴⒉幌衿渌鹐xact方法那么直觀看出來:
Math.negateExact(100); // returns -100
Math.negateExact(Integer.MIN_VALUE); // throws ArithmeticException
第二個示例需要解釋下,因?yàn)椴荒芤谎劭闯鰜恚阂绯鍪且驗(yàn)镮nteger.MIN_VALUE 是 −2.147.483.648,而Integer.MAX_VALUE 是 2.147.483.647,所以返回值超出整數(shù)范圍。
其他方法
floorDiv()
第一個參數(shù)除以第二參數(shù),然后針對結(jié)果執(zhí)行floor操作,返回小于或等于商的整數(shù):
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()方法類似, 但在模數(shù)或余數(shù)上應(yīng)用floor() 操作,而不是商:
Math.modDiv(5, 3)); // returns 2
我們看到 , modDiv() 方法兩個參數(shù)為正數(shù),和 % 操作符效果一樣。讓看看另一個不同示例:
Math.modDiv(-5, 3)); // returns 1
結(jié)果為 1 而不是 2 ,因?yàn)閒loorDiv(-5, 3) 是 -2 ,而不是 -1.
nextDown()方法
返回參數(shù)直接較低的值(支持 float 或 double 參數(shù)):
float f = Math.nextDown(3); // returns 2.9999998
double d = Math.nextDown(3); // returns 2.999999761581421
總結(jié)
我們描述了java8中java.lang.Math類中所有新的方法,并通過示例給與解釋說明。
補(bǔ)充知識:math類常用方法詳細(xì)總結(jié)
說明:Math 類位于 java.lang 包中,主要提供了一些常用的數(shù)學(xué)函數(shù)和計算
備注:一些在工程計算中才用的方法此處不做介紹
一、取整運(yùn)算
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)
釋義:四舍五入取整,參數(shù)類型: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
二、隨機(jī)運(yùn)算
Math.random()
釋義:內(nèi)部調(diào)用了 Random.nextDouble() 方法,生成一個偽均勻分布在 [0,1)之間的 double 值
System.out.println((int)(Math.random() * 10 + 1)); // 生成范圍再[1, 11)之間的偽隨機(jī)數(shù)
三、符號運(yùn)算
1、Math.abs(int x)
釋義:計算絕對值,參數(shù)類型:int、long、float、double
System.out.println(Math.abs(-1)); // 1
2、Math.negateExact(int x)
釋義:計算相反值,參數(shù)類型:int、long
System.out.println(Math.negateExact(-1)); // 1
四、大小運(yùn)算
1、Math.max(int x, int y)
釋義:獲取兩個參數(shù)中的最大值,參數(shù)類型:int、long、float、double
System.out.println(Math.max(1, 2)); // 2
2、Math.min(int x, int y)
釋義:獲取兩個參數(shù)中的最小值,參數(shù)類型:int、long、float、double
System.out.println(Math.min(1, 2)); // 1
3、Math.rint(double x)
釋義:獲取與參數(shù)最接近的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新增方法介紹就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Java設(shè)計一個高并發(fā)的秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何基于Java設(shè)計一個高并發(fā)的秒殺系統(tǒng),文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考下2023-10-10Java?8函數(shù)式接口之BinaryOperator使用示例詳解
這篇文章主要大家介紹了Java?8函數(shù)式接口之BinaryOperator,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Struts2學(xué)習(xí)教程之?dāng)r截器機(jī)制與自定義攔截器
這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)基礎(chǔ)教程之?dāng)r截器機(jī)制與自定義攔截器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05java并發(fā)編程專題(一)----線程基礎(chǔ)知識
這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識,文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下2020-06-06Spring Boot使用AOP實(shí)現(xiàn)REST接口簡易靈活的安全認(rèn)證的方法
這篇文章主要介紹了Spring Boot使用AOP實(shí)現(xiàn)REST接口簡易靈活的安全認(rèn)證的方法,非常具有實(shí)用價值,需要的朋友可以參考下2018-11-11springboot整合shiro登錄失敗次數(shù)限制功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot整合shiro-登錄失敗次數(shù)限制功能,實(shí)現(xiàn)此功能如果是防止壞人多次嘗試,破解密碼的情況,所以要限制用戶登錄嘗試次數(shù),需要的朋友可以參考下2018-09-09Java如何使用poi導(dǎo)入導(dǎo)出excel工具類
這篇文章主要介紹了Java如何使用poi導(dǎo)入導(dǎo)出excel工具類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06springboot啟動后卡住無日志的幾種情況小結(jié)
這篇文章主要介紹了springboot啟動后卡住無日志的幾種情況小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Activiti explorer.war示例工程使用過程圖解
這篇文章主要介紹了Activiti explorer.war示例工程使用過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03