最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())

 更新時(shí)間:2022年06月15日 16:01:48   作者:明月幾時(shí)有666  
在調(diào)外部接口獲取列表數(shù)據(jù)時(shí),需要判斷是否已經(jīng)取完了所有的值,因此需要用到向上取整,下面這篇文章主要給大家介紹了關(guān)于Java兩整數(shù)相除向上取整的相關(guān)資料,需要的朋友可以參考下

前言:

Java中兩個(gè)整數(shù)相除,如果不能整除,默認(rèn)是向下取整的。例如:11 除以 3 的結(jié)果是 3。然而,某些情況下(eg. 把11個(gè)糖果,每3個(gè)分一堆,不足三個(gè)也分成一堆,可以分幾堆?),我們需要向上取整,這樣的情況該如果處理呢?

方式一: 添加三目運(yùn)算符邏輯代碼

x / y + (x % y != 0 ? 1 : 0);

這種方法邏輯上很簡(jiǎn)單,如果x可以整除y,就將x / y 的結(jié)果加0,不能整除y就將x / y 的結(jié)果加1。

方式二:使用ceil函數(shù)

 (int)Math.ceil((double)x/y);
 // 或者
 (int)Math.ceil(x * 1.0 /y);

首先,將被除數(shù)轉(zhuǎn)換成double類型,再將計(jì)算的結(jié)果通過(guò)Math.ceil()函數(shù)向上取整,這種方式是網(wǎng)上經(jīng)??梢钥吹降姆绞?。

方式三:其他邏輯

(x + y - 1) / y

這種方式為什么可以達(dá)到向上取整的效果呢,為什么x要加y - 1?

為了方便理解,我們通過(guò)具體的計(jì)算來(lái)說(shuō)明。

1.對(duì)于可以整除的情況

x = 9,y = 3

(x + (y - 1)) / y,x加上了一個(gè)比y小的數(shù),最終(x + (y - 1)) / y = (x / y) ...y - 1

商為(x / y), 余數(shù)為(y - 1),余數(shù)相當(dāng)于兩數(shù)相除結(jié)果都小數(shù)部分,會(huì)被舍去,最終(x + (y - 1)) / y` = (x / y)

2.對(duì)于不可以整除的情況

x = 11, y = 3

11 / 3 = 3 ... 2

x + (y - 1) = (3 * 3 + 2) + (3 - 1) = (3 * 3 + 2 - 1)+ 3= (3 * 3 + 3) + 2 - 1

x + (y - 1) / y = ((3 * 3 + 3) + 2 - 1 )/ 3 = 4

就是x不能整除y余數(shù)肯定在1到y(tǒng) - 1之間,從中取出1給y - 1,使得被除數(shù)增加了一個(gè)y,進(jìn)而商會(huì)增加1,余數(shù)部分為0到y(tǒng) - 2是會(huì)被舍去的。

最后總結(jié)

第一種方法:最簡(jiǎn)單、清楚,是比較推薦的;

第二種方法:雖然常見(jiàn),但是涉及過(guò)多類型轉(zhuǎn)換,個(gè)人不推薦

第三種方法:很巧妙,不太容易理解,也是推薦的

附:java向上取整函數(shù)Math.ceil()

java向上取整函數(shù)Math.ceil()

百度Math.ceil()函數(shù):“Math.ceil()是常見(jiàn)編程語(yǔ)言中的常用代碼,ceil() 方法執(zhí)行的是向上取整計(jì)算,它返回的是大于或等于函數(shù)參數(shù),并且與之最接近的整數(shù)。“

Math.ceil(param)使用實(shí)例:

		double dividend = 7;	// 被除數(shù)
		double divisor = 2;		// 除數(shù)
		double flag = 0;	
		int result1 = 0;
		int result2 = 0;
		
		// 函數(shù)式
		flag = Math.ceil(dividend / divisor);		//向上取整計(jì)算
		result1 = (int)flag;			//將結(jié)果轉(zhuǎn)化為int數(shù)據(jù)類型
		
		// 判斷式:整除法
		if ((dividend % divisor) == 0) {
			result2 = (int)dividend / (int)divisor;               // 將操作數(shù)轉(zhuǎn)化為int型數(shù)據(jù)
		} else {
			result2 = ((int)dividend / (int)divisor) + 1;         // 將操作數(shù)轉(zhuǎn)化為int型數(shù)據(jù)
		}
 
		Object[] options = { "成功", "取消" };
		JOptionPane.showOptionDialog(null, "函數(shù)ceil求值=" + result1 + "; 判斷求值=" +result2, 
			"Warning",JOptionPane.DEFAULT_OPTION, 
			JOptionPane.WARNING_MESSAGE,null, options, options[0]); 

結(jié)果為所要的:(函數(shù)式與整除判斷式等效)

注意:

兩個(gè)限制:判斷式,適用于整除;其操作數(shù)為int(Integer)數(shù)據(jù)類型,否則,得不到想要的效果。函數(shù)式,若使用int(Integer)作為操作數(shù)(參數(shù)),需要特別注意:

		double dividend = 7;	// 被除數(shù)
		double divisor = 2;		// 除數(shù)
		double flag = 0;	
		int result1 = 0;
		int result2 = 0;
		
		// 函數(shù)式
		// ① (int)dividend / (int)divisor 將計(jì)算結(jié)果直接轉(zhuǎn)換為int型,因此這里的結(jié)果為3
		//(int 類型丟失精度,即小數(shù)點(diǎn)之后的數(shù)丟失,本例的 3.5 丟失了0.5;
		// 這里涉及 高精度數(shù) 向 低精度數(shù) 轉(zhuǎn)化時(shí),會(huì)丟失精度。
		// 精度從低到高 int < double < float).
		// ② Math.ceil(3)函數(shù)執(zhí)行,向上取整,也是3 
		// 感謝 博友“ws458371436” 的糾正,之前這個(gè)地方是糊涂的,還好有博友的細(xì)心,避免再誤導(dǎo)其他朋友
		flag = Math.ceil((int)dividend / (int)divisor);	// 向上取整計(jì)算int = Math.ceil(int),對(duì)int整數(shù)取整,純屬多余! 
 
		result1 = (int)flag;		//將結(jié)果轉(zhuǎn)化為int數(shù)據(jù)類型
		
		// 判斷式:整除法
		if ((dividend % divisor) == 0) {
			result2 = dividend / divisor;                    // 保持double型數(shù)據(jù)類型
		} else {
			result2 = (dividend / divisor) + 1;             // 保持double型數(shù)據(jù)類型
		}
 
		Object[] options = { "成功", "取消" };
		JOptionPane.showOptionDialog(null, "函數(shù)ceil求值=" + result1 + "; 判斷求值=" +result2, 
			"Warning",JOptionPane.DEFAULT_OPTION, 
			JOptionPane.WARNING_MESSAGE,null, options, options[0]); 

測(cè)試結(jié)果:

總結(jié):函數(shù)(接口),都具有它的適應(yīng)范圍和限制條件,正是這些條件,標(biāo)定了基本功能,有準(zhǔn)確的指向,得出特定效果。這也是智能。

到此這篇關(guān)于Java兩整數(shù)相除向上取整的文章就介紹到這了,更多相關(guān)Java整數(shù)相除向上取整內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解

    SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解

    在Java微服務(wù)越來(lái)越火的今天。幾乎什么公司都在搞微服務(wù)。而使用的比較多的就是Spring?Cloud技術(shù)棧。今天就來(lái)研究一下Spring?Cloud中服務(wù)發(fā)現(xiàn)與調(diào)用的基本原理
    2022-07-07
  • hadoop的wordcount實(shí)例代碼

    hadoop的wordcount實(shí)例代碼

    這篇文章主要介紹了hadoop的wordcount實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖

    Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖

    這篇文章主要給大家介紹了關(guān)于Spring Boot基于數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)簡(jiǎn)單的分布式鎖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 淺談JAVA Actor模型的一致性與隔離性

    淺談JAVA Actor模型的一致性與隔離性

    這篇文章主要介紹了JAVA Actor模型的的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的學(xué)習(xí)JAVA,感興趣的朋友可以了解下
    2020-06-06
  • Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼

    Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼

    本文主要介紹了Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼,Socket可以建立起客戶端和服務(wù)器之間的連接,實(shí)現(xiàn)數(shù)據(jù)的傳輸和交互,感興趣的可以了解一下
    2023-09-09
  • java代碼抓取網(wǎng)頁(yè)郵箱的實(shí)現(xiàn)方法

    java代碼抓取網(wǎng)頁(yè)郵箱的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇java代碼抓取網(wǎng)頁(yè)郵箱的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Java高級(jí)之HashMap中的entrySet()方法使用

    Java高級(jí)之HashMap中的entrySet()方法使用

    這篇文章主要介紹了Java高級(jí)之HashMap中的entrySet()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Sharding-Jdbc 自定義復(fù)合分片的實(shí)現(xiàn)(分庫(kù)分表)

    Sharding-Jdbc 自定義復(fù)合分片的實(shí)現(xiàn)(分庫(kù)分表)

    本文主要介紹了Sharding-Jdbc 自定義復(fù)合分片的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java設(shè)計(jì)通用的返回?cái)?shù)據(jù)格式過(guò)程講解

    Java設(shè)計(jì)通用的返回?cái)?shù)據(jù)格式過(guò)程講解

    現(xiàn)在很多的項(xiàng)目server端返回client端的數(shù)據(jù)多數(shù)以JSON格式返回,同時(shí)結(jié)合其它需要,通常加一下?tīng)顟B(tài)碼和信息之類,給前端處理帶來(lái)很大的方便,這篇文章就用Java設(shè)計(jì)了通用的返回?cái)?shù)據(jù)格式,感興趣的同學(xué)可以參考下文
    2023-05-05
  • Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

光泽县| 鄂托克旗| 黄陵县| 昭觉县| 沈阳市| 富平县| 丽水市| 榆社县| 兴化市| 道孚县| 拉孜县| 龙陵县| 盐亭县| 贵州省| 山丹县| 建水县| 德清县| 巴彦县| 襄樊市| 理塘县| 柏乡县| 金塔县| 连平县| 潍坊市| 滁州市| 买车| 富蕴县| 锦屏县| 唐河县| 平陆县| 洪泽县| 宕昌县| 武穴市| 黄大仙区| 康定县| 水城县| 玛多县| 高邮市| 景德镇市| 庄浪县| 荔浦县|