11

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

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

在此示例中,我希望 o 为 100(即毫秒),但它等于 NSLog(@"%d", o) 显示的 0。

这也等于 0。

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

这等于 250,000,这是直接从左到右的数学运算。

int o = 60 / i * 50 * 1000;

什么在我头上飞来飞去?

谢谢,
尼克

4

7 回答 7

20

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

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

60 / (i * 50) * 1000

首先计算括号内的项,因此 60 除以 600,得到结果 0。在

60 / i * 50 * 1000

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

于 2010-11-16T18:57:41.567 回答
4

一个整数除以一个整数是一个整数。

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

转换(或声明)一些东西float

于 2010-11-16T18:57:59.123 回答
1

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

如果您强制浮点然后转换回整数应该可以工作。

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

可能并不是真的有必要让所有东西都翻倍。

于 2010-11-16T18:58:40.713 回答
1

代替:

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

和:

int o = 1200/i;
于 2010-11-16T19:05:02.033 回答
0

按优先顺序,操作:

60 / (12 * 50) 

在乘以之前执行1000

该值小于 1 并被强制转换为int,从而将其截断为0。和0时代任何东西都是0

使用 afloat或先乘以1000确保不会0在计算中传播 a 。

于 2010-11-16T18:59:43.040 回答
0

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

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

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

应该是 o = 100。

于 2010-11-16T19:01:45.540 回答
0

我认为你需要在这里使用 float 而不是 int。它会按照你想要的方式工作!也会给你十进制的答案。

于 2012-04-03T20:55:31.627 回答