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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么叫侧面指纹识别_侧面指纹识别方案还有哪些问题没有解决?

    什么叫侧面指纹识别_侧面指纹识别方案还有哪些问题没有解决?当我们回首手机圈不难发现两个关键词——金属机身以及指纹识别。虽然指纹识别功能并不是直到今年才出现在智能手机之上,在这一年中,各大手机厂商先是采用了与iPhone相同的正面指纹识别方案,然而没过多久便有厂商提出,指纹识别功能放在机身背面更好用(成本低才是真相);一时间,关于“内裤到底该正着穿,还是反着穿?”的争论,成为各大手机发布会必谈的话题之一。直到侧面指纹识别方案的出现,广大的手机用户才发现,原…

    2022年8月10日
    4
  • 如何完成域名和ip地址的绑定

    如何完成域名和ip地址的绑定

    2021年9月20日
    58
  • C++ 逻辑与或非 逻辑与逻辑或 逻辑非

    C++ 逻辑与或非 逻辑与逻辑或 逻辑非逻辑运算符 与 或 非 amp amp 作用 根据表达式的值返回真值或者假值逻辑非 include iostream usingnamespa intmain 在 C 中 除了 0 都是真 inta 10 cout lt a endl cout a endl system pause return0 逻辑与 iostream

    2025年7月3日
    4
  • 你愿意成为一名全栈设计师吗?

    你愿意成为一名全栈设计师吗?

    2022年3月5日
    38
  • MODIS数据wget下载[通俗易懂]

    MODIS数据wget下载[通俗易懂]运行/cmdwget.exe放在E:\DATA\MODIS\MCD12Q1目录下。wget-erobots=off-m-np-R.html,.tmp-nH–cut-dirs=3“https://ladsweb.modaps.eosdis.nasa.gov/archive/orders/501504344/”–header“Authorization:Bearera2ltaHl1bmpvb25nOmEybHRhSGwxYm1wdmIyNW5NakpBWjIxaGFXd3VZ

    2022年5月29日
    50
  • srvctl start_RISC-V指令

    srvctl start_RISC-V指令SRVCTL是ORACLE9iRAC集群配置管理的工具。RAC:  RealApplicationClustersSRVM: ServerManagementSRVCTLAdd添加数据库或实例的配置信息。在增加实例中,与-i一起指定的名字应该与INSTANCE_NAME和ORACLE_SID参数匹配。srvctladddatabase-ddatabas

    2022年9月12日
    4

发表回复

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

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