欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言:

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

方式一: 添加三目運算符邏輯代碼

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

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

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

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

首先,將被除數(shù)轉換成double類型,再將計算的結果通過Math.ceil()函數(shù)向上取整,這種方式是網上經??梢钥吹降姆绞健?/p>

方式三:其他邏輯

(x + y - 1) / y

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

為了方便理解,我們通過具體的計算來說明。

1.對于可以整除的情況

x = 9,y = 3

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

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

2.對于不可以整除的情況

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ù)增加了一個y,進而商會增加1,余數(shù)部分為0到y(tǒng) - 2是會被舍去的。

最后總結

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

第二種方法:雖然常見,但是涉及過多類型轉換,個人不推薦

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

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

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

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

Math.ceil(param)使用實例:

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

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

注意:

兩個限制:判斷式,適用于整除;其操作數(shù)為int(Integer)數(shù)據類型,否則,得不到想要的效果。函數(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 將計算結果直接轉換為int型,因此這里的結果為3
		//(int 類型丟失精度,即小數(shù)點之后的數(shù)丟失,本例的 3.5 丟失了0.5;
		// 這里涉及 高精度數(shù) 向 低精度數(shù) 轉化時,會丟失精度。
		// 精度從低到高 int < double < float).
		// ② Math.ceil(3)函數(shù)執(zhí)行,向上取整,也是3 
		// 感謝 博友“ws458371436” 的糾正,之前這個地方是糊涂的,還好有博友的細心,避免再誤導其他朋友
		flag = Math.ceil((int)dividend / (int)divisor);	// 向上取整計算int = Math.ceil(int),對int整數(shù)取整,純屬多余! 
 
		result1 = (int)flag;		//將結果轉化為int數(shù)據類型
		
		// 判斷式:整除法
		if ((dividend % divisor) == 0) {
			result2 = dividend / divisor;                    // 保持double型數(shù)據類型
		} else {
			result2 = (dividend / divisor) + 1;             // 保持double型數(shù)據類型
		}
 
		Object[] options = { "成功", "取消" };
		JOptionPane.showOptionDialog(null, "函數(shù)ceil求值=" + result1 + "; 判斷求值=" +result2, 
			"Warning",JOptionPane.DEFAULT_OPTION, 
			JOptionPane.WARNING_MESSAGE,null, options, options[0]); 

測試結果:

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

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

相關文章

  • Java設計模式 模板模式及應用場景解析

    Java設計模式 模板模式及應用場景解析

    這篇文章主要介紹了Java設計模式 模板模式及應用場景解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • Feign調用接口解決處理內部異常的問題

    Feign調用接口解決處理內部異常的問題

    這篇文章主要介紹了Feign調用接口解決處理內部異常的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot通過@Scheduled實現(xiàn)定時任務及單線程運行問題解決

    SpringBoot通過@Scheduled實現(xiàn)定時任務及單線程運行問題解決

    Scheduled定時任務是Spring boot自身提供的功能,所以不需要引入Maven依賴包,下面這篇文章主要給大家介紹了關于SpringBoot通過@Scheduled實現(xiàn)定時任務以及問題解決的相關資料,需要的朋友可以參考下
    2023-02-02
  • Java中泛型使用的簡單方法介紹

    Java中泛型使用的簡單方法介紹

    這篇文章主要給大家介紹了關于Java中泛型使用的簡單方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法

    java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法

    這篇文章主要介紹了java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法的相關資料,需要的朋友可以參考下
    2016-11-11
  • Java中@InitBinder注解的使用原理詳解

    Java中@InitBinder注解的使用原理詳解

    這篇文章主要介紹了Java中@InitBinder注解的使用原理詳解,在Java中,@InitBinder 注解是用于標記一個方法,該方法將在控制器(Controller)處理請求之前被調用,用于進行一些數(shù)據綁定和預處理的操作,需要的朋友可以參考下
    2023-10-10
  • Java使用泛型實現(xiàn)棧結構的示例代碼

    Java使用泛型實現(xiàn)棧結構的示例代碼

    泛型是JAVA重要的特性,使用泛型編程,可以使代碼復用率提高。本文將利用泛型實現(xiàn)簡單的棧結構,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-08-08
  • 淺談java socket的正確關閉姿勢

    淺談java socket的正確關閉姿勢

    這篇文章主要介紹了java socket的正確關閉姿勢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java語言實現(xiàn)簡單FTP軟件 FTP連接管理模塊實現(xiàn)(8)

    Java語言實現(xiàn)簡單FTP軟件 FTP連接管理模塊實現(xiàn)(8)

    這篇文章主要為大家詳細介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP連接管理模塊的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 解讀maven配置阿里云鏡像問題

    解讀maven配置阿里云鏡像問題

    這篇文章主要介紹了解讀maven配置阿里云鏡像問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論