Objective-C整数算术

时间:2010-11-16 18:52:10

标签: objective-c c math integer-division

我正在尝试计算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;

我头顶飞过什么?

谢谢,
尼克

7 个答案:

答案 0 :(得分:19)

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

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

60 / (i * 50) * 1000

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

60 / i * 50 * 1000

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

答案 1 :(得分:4)

整数除以整数是整数。

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

将某些内容转换(或声明)为float

答案 2 :(得分:3)

替换:

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

使用:

int o = 1200/i;

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

按优先顺序,操作:

60 / (12 * 50) 
在乘以1000之前执行

此值小于1,并转换为int,将其截断为000float

使用1000或首先乘以0,以确保您最终不会在计算中传播{{1}}。

答案 5 :(得分:0)

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

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

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

应为o = 100.

答案 6 :(得分:0)

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