<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Java中兩個整數相除,如果不能整除,預設是向下取整的。例如:11 除以 3 的結果是 3。然而,某些情況下(eg. 把11個糖果,每3個分一堆,不足三個也分成一堆,可以分幾堆?),我們需要向上取整,這樣的情況該如果處理呢?
x / y + (x % y != 0 ? 1 : 0);
這種方法邏輯上很簡單,如果x可以整除y,就將x / y 的結果加0,不能整除y就將x / y 的結果加1。
(int)Math.ceil((double)x/y); // 或者 (int)Math.ceil(x * 1.0 /y);
首先,將被除數轉換成double型別,再將計算的結果通過Math.ceil()函數向上取整,這種方式是網上經常可以看到的方式。
(x + y - 1) / y
這種方式為什麼可以達到向上取整的效果呢,為什麼x要加y - 1?
為了方便理解,我們通過具體的計算來說明。
1.對於可以整除的情況
x = 9,y = 3
(x + (y - 1)) / y,x加上了一個比y小的數,最終(x + (y - 1)) / y = (x / y) ...y - 1
商為(x / y), 餘數為(y - 1),餘數相當於兩數相除結果都小數部分,會被捨去,最終(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餘數肯定在1到y - 1之間,從中取出1給y - 1,使得被除數增加了一個y,進而商會增加1,餘數部分為0到y - 2是會被捨去的。
第一種方法:最簡單、清楚,是比較推薦的;
第二種方法:雖然常見,但是涉及過多型別轉換,個人不推薦
第三種方法:很巧妙,不太容易理解,也是推薦的
java向上取整函數Math.ceil()
百度Math.ceil()函數:“Math.ceil()是常見程式語言中的常用程式碼,ceil() 方法執行的是向上取整計算,它返回的是大於或等於函數引數,並且與之最接近的整數。“
Math.ceil(param)使用範例:
double dividend = 7; // 被除數 double divisor = 2; // 除數 double flag = 0; int result1 = 0; int result2 = 0; // 函數式 flag = Math.ceil(dividend / divisor); //向上取整計算 result1 = (int)flag; //將結果轉化為int資料型別 // 判斷式:整除法 if ((dividend % divisor) == 0) { result2 = (int)dividend / (int)divisor; // 將運算元轉化為int型資料 } else { result2 = ((int)dividend / (int)divisor) + 1; // 將運算元轉化為int型資料 } Object[] options = { "成功", "取消" }; JOptionPane.showOptionDialog(null, "函數ceil求值=" + result1 + "; 判斷求值=" +result2, "Warning",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
結果為所要的:(函數式與整除判斷式等效)
注意:
兩個限制:判斷式,適用於整除;其運算元為int(Integer)資料型別,否則,得不到想要的效果。函數式,若使用int(Integer)作為運算元(引數),需要特別注意:
double dividend = 7; // 被除數 double divisor = 2; // 除數 double flag = 0; int result1 = 0; int result2 = 0; // 函數式 // ① (int)dividend / (int)divisor 將計算結果直接轉換為int型,因此這裡的結果為3 //(int 型別丟失精度,即小數點之後的數丟失,本例的 3.5 丟失了0.5; // 這裡涉及 高精度數 向 低精度數 轉化時,會丟失精度。 // 精度從低到高 int < double < float). // ② Math.ceil(3)函數執行,向上取整,也是3 // 感謝 博友「ws458371436」 的糾正,之前這個地方是糊塗的,還好有博友的細心,避免再誤導其他朋友 flag = Math.ceil((int)dividend / (int)divisor); // 向上取整計算int = Math.ceil(int),對int整數取整,純屬多餘! result1 = (int)flag; //將結果轉化為int資料型別 // 判斷式:整除法 if ((dividend % divisor) == 0) { result2 = dividend / divisor; // 保持double型資料型別 } else { result2 = (dividend / divisor) + 1; // 保持double型資料型別 } Object[] options = { "成功", "取消" }; JOptionPane.showOptionDialog(null, "函數ceil求值=" + result1 + "; 判斷求值=" +result2, "Warning",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
測試結果:
總結:函數(介面),都具有它的適應範圍和限制條件,正是這些條件,標定了基本功能,有準確的指向,得出特定效果。這也是智慧。
到此這篇關於Java兩整數相除向上取整的文章就介紹到這了,更多相關Java整數相除向上取整內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45