,,Java两整数相除向上取整的方式详解(Math.ceil())

,,Java两整数相除向上取整的方式详解(Math.ceil())

在调整外部接口获取列表数据时,需要判断是否取完了所有的值,所以需要取整。下面这篇文章主要介绍Java中两个整数相除和上舍入的相关信息,有需要的朋友可以参考一下。

目录

前言:方法一:添加三元运算符的逻辑代码;方法二:使用ceil函数;方法三:其他逻辑的最终总结;附:java向上舍入函数Math.ceil()

前言:

用Java将两个整数相除。如果不可分,默认情况下向下舍入。例如,11除以3的结果是3。然而,在某些情况下(例如,11个糖果,每3个糖果,少于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

为什么这种方法能达到四舍五入的效果?为什么要把y-1加到X上?

为了便于理解,我们通过具体计算来说明。

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,然后商会就增加一个。从0到y-2的余数将被丢弃。

最后总结

第一种方法:最简单,明确,推荐;

第二种方法:虽然常见,但是涉及转换类型太多,个人不推荐。

第三种方法:很巧妙,不太好理解,推荐。

附:java向上取整函数Math.ceil()

java向上取整函数Math.ceil()

百度Math.ceil()函数:“Math.ceil()是常见编程语言中的常见代码。ceil()方法执行向上舍入计算,它返回一个大于或等于函数参数且最接近它的整数。

Math.ceil(param)使用示例:

双倍红利=7;//股息

双倍除数=2;//除数

双标志=0;

int result 1=0;

int result 2=0;

//函数表达式

flag=Math.ceil(被除数/除数);//舍入计算

result1=(int)标志;//将结果转换为int数据类型

//判断公式:整除法

if((被除数百分比除数)==0) {

result2=(int)被除数/(int)除数;//将操作数转换为int数据

}否则{

result2=((int)被除数/(int)除数)1;//将操作数转换为int数据

}

Object[] options={ '成功','取消' };

JooptionPane。Showoptiondialog (null,“函数单元求值=“结果1”;评估='结果2,

警告,JOptionPane。默认选项,

JOptionPane。WARNING_MESSAGE,null,options,options[0]);

结果就是你想要的:(函数公式等价于可除判断公式)

注意:

两个限制:判断公式,适用于整除;它的操作数是int(Integer)数据类型,否则得不到想要的效果。类型,如果你使用int(Integer)作为操作数(parameter),你需要特别注意:

双倍红利=7;//股息

双倍除数=2;//除数

双标志=0;

int result 1=0;

int result 2=0;

//函数表达式

// (int) divide/(int) divide直接将计算结果转换为int类型,所以这里的结果是3。

//(int类型丢失精度,即小数点后的数字丢失。在这个例子中,3.5损失了0.5;

//这涉及到高精度数转换成低精度数时精度的损失。

//精度从低到高int双浮点)。

// Math.ceil(3)函数执行,四舍五入,也是3

//感谢博主“ws458371436”指正。这个地方以前很混乱。幸运的是,博主们小心翼翼地避免误导其他朋友。

flag=Math.ceil((int)被除数/(int)除数);//向上取整计算int=Math.ceil(int),对int整数取整,没必要!

result1=(int)标志;//将结果转换为int数据类型

//判断公式:整除法

if((被除数百分比除数)==0) {

结果2=被除数/除数;//保留双精度数据类型

}否则{

result2=(被除数/除数)1;//保留双精度数据类型

}

Object[] options={ '成功','取消' };

JooptionPane。Showoptiondialog (null,“函数单元求值=“结果1”;评估='结果2,

警告,JOptionPane。默认选项,

JOptionPane。WARNING_MESSAGE,null,options,options[0]);

测试结果:

总结:函数(接口)都有其适应范围和限制条件。正是这些条件划定了基本功能,有了准确的方向,得到了具体的结果。这也是智力。

这就是这篇关于Java中整数除法和舍入的文章。有关Java中整数除法和舍入的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: