Java两整数相除向上取整

Java两整数相除向上取整前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11除以3的结果是3。然而,某些情况下(eg.把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?方式一:添加三目运算符逻辑代码x/y+(x%y!=0?1:0);这种方法逻辑上很简单,如果x可以整除y,就将x/y的结果加0,不能整除y就将x/y的结果加1。方式二:使用ceil函数(int)Math.ceil((double.

大家好,又见面了,我是你们的朋友全栈君。

前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢?

方式一: 添加三目运算符逻辑代码

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

这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。

方式二:使用ceil函数

 (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是会被舍去的。

最后总结
第一种方法:最简单、清楚,是比较推荐的;
第二种方法:虽然常见,但是涉及过多类型转换,个人不推荐
第三种方法:很巧妙,不太容易理解,也是推荐的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151821.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里Java高级工程师面试题(含答案)

    阿里Java高级工程师面试题(含答案)1,java堆,分新生代老年代,新生代有Eden,fromsurviver,tosurviver三个空间,堆被所有线程共。eden内存不足时,发生一次minorGC,会把fromsurvivor和eden的对象复制到tosurvivor,这次的to survivor就变成了下次的fromsurvivor,经过多次minorGC,默认15次,达到次数的对象会从survivor…

    2022年5月2日
    46
  • linux线程同步有几种方法_shell多线程执行命令

    linux线程同步有几种方法_shell多线程执行命令Linux中的线程同步机制(一)–Futex引子在编译2.6内核的时候,你会在编译选项中看到[*]Enablefutexsupport这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢?1.什么是FutexFutex是FastUserspacemuTexes的缩写

    2022年9月17日
    0
  • linux恢复硬盘初始状态,初始化Linux数据盘(fdisk)[通俗易懂]

    linux恢复硬盘初始状态,初始化Linux数据盘(fdisk)[通俗易懂]初始化Linux数据盘(fdisk)TkV南京数据恢复-西数科技:硬盘/手机/SSD数据恢复专家.025-8360863618913825606查看PDFTkV南京数据恢复-西数科技:硬盘/手机/SSD数据恢复专家.025-8360863618913825606分享操作场景本文以云服务器的操作系统为“CentOS7.464位”为例,采用fdisk分区工具为数据盘设置分区。TkV…

    2022年5月27日
    55
  • pytest skipif_pytest如何循环执行用例

    pytest skipif_pytest如何循环执行用例前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月31日
    3
  • 控件视图的实现原理[建议收藏]

    控件类的实现原理:CTreeCtrlTreeCtrl=*(CTreeCtrl*)CTreeView;实现条件:CTreeCtrl类中没有虚函数和成员变量由于CTreeCtrl类中没有虚函数

    2021年12月18日
    44
  • “SqlTransaction 已完成;它再也无法使用”解决方法

    “SqlTransaction 已完成;它再也无法使用”解决方法 当只是使用一次事务时,只用简单的事务就可以了示例代码:      SqlServerDataBaseobj=newSqlServerDataBase();       SqlConnectionconn=obj.DBconn();       conn.Open();       SqlTransactionmyTrans;       myTrans=co

    2022年5月20日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号