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


相关推荐

  • 一文教你检测MOS管好坏的五大诀窍「建议收藏」

    MOS管是金属—氧化物-半导体场效应晶体管,或者称是金属—绝缘体—半导体。MOS管因导通压降下,导通电阻小,栅极驱动不需要电流,损耗小,价格便宜等优点在电子行业深受人们的喜爱与追捧,随着电子行业飞跃式的发展,MOS管的需求量也越来越大,就在此时一批批MOS管生产厂家如雨后春笋般涌现到我们的眼前,他们的出现瞬间使得MOS管的质量的急速下滑,由于这些厂家的技术不成熟,而且当中也掺杂了许多山寨的MOS管…

    2022年4月4日
    189
  • idea实用插件大全_intellij idea插件

    idea实用插件大全_intellij idea插件?常用?MyBatisLogPlugin(控制台SQL转换成可执行SQL)?KeyPromoterX(快捷键提示)?CodeGlance(代码小地图)?FreeMybatisplugin(mapper和xml文件跳转)?GrepConsole(控制台日志过滤查看)?Lombok(简化类代码)?StringManipulation(字符串转换)?AlibabaJavaCodingGuidelines(阿里巴巴代码规约扫描)?JRebel(热部署)

    2022年8月31日
    4
  • linux awk命令详解

    linux awk命令详解awk是行处理器:相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息awk处理过程:依次对每一行进行处理,然后输出awk命令形式:awk[-F|-f|-v]‘BEGIN{}//{command1;command2}END{}’file[-F|-f|-v]大参数,-F指定分隔符,-f调用脚本,-v定义变量var=…

    2022年7月11日
    44
  • uni-app USB连接真机测试[通俗易懂]

    uni-app USB连接真机测试[通俗易懂]1、连接手机到电脑,允许开发调试当现在红框的内容就说明连接上了2、制作自定义基座3、选择自定义基座4、运行

    2025年9月17日
    8
  • 断言assert的用法_断言与断定

    断言assert的用法_断言与断定我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解

    2022年8月3日
    6
  • loadrunner安装包下载_loadrunner2021安装

    loadrunner安装包下载_loadrunner2021安装LoadRunner安装包下载:下载链接:https://pan.baidu.com/s/10BdYFXLPYdW6N7Q67D8mjQ提取码:a3piLoadRunner安装:下载后找到路径,点击下载后的HPELoadRunner12.55CommunityEdition.exe(安装版)运行,建议鼠标右键以管理员身份运行(运行的时候尽量右键管理员运行,如果没有选择右键管理员运行,会提示权限,点击是就可以啦)选择安装的地址(所有的安装地址不能有中文),可以选择默认地.

    2022年8月31日
    4

发表回复

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

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