Objective-C整数算术

我正在尝试计算iPhone应用程序中的一些数字。

int i = 12; int o = (60 / (i * 50)) * 1000; 

我希望在这个例子中o为100(即毫秒),但它等于0,由NSLog(@“%d”,o)显示。

这也等于0。

 int o = 60 / (i * 50) * 1000; 

这相当于250,000,这是从左到右的直接数学。

 int o = 60 / i * 50 * 1000; 

什么在我头顶飞过?

谢谢,
缺口

在Objective-C /对整数参数执行整数除法,因此4/5被截断为0,3 / 2被截断为1,依此类推。 您可能希望在执行除法之前将一些数字转换为浮点forms。

您还遇到了优先问题。 在表达中

 60 / (i * 50) * 1000 

括号内的术语首先计算,因此60除以600,产生结果0

 60 / i * 50 * 1000 

第一个操作是将60除以12,得到结果5,然后进行乘法运算。

除以整数的整数是整数。

所以60/600不是0.1 ,它是0

将某些东西转换(或声明)为float代替。

更换:

 int o = (60 / (i * 50)) * 1000; 

有:

 int o = 1200/i; 

它正在进行整数数学运算。 60 /(12 * 50)为0.1,截断为0。

如果强制浮点然后强制转换为整数,则应该有效。

 int o = (int)(60.0 / ((double) i / 50.0) * 1000.0; 

可能没有必要让一切都变成双倍。

按优先顺序,操作:

 60 / (12 * 50) 

在乘以1000之前执行。

此值小于1并转换为int ,将其截断为0 。 并且0次是0

使用float或首先乘以1000以确保您不会在计算中传播0

表达式中的所有操作都以整数运算执行,这意味着每个中间结果的小数部分都会被截断。 这意味着如果将较小的整数除以较大的整数,则总是得到0。

要获得您想要的结果,您必须确保以特定顺序执行操作,或者必须使用浮点数。 例如,结果

 int o = (60.0 / (i * 50.0)) * 1000.0; 

应该是o = 100。

我认为你需要在这里使用float而不是int。 它会以你想要的方式工作! 也会给你小数回答。