Objective-C整数算术

Sta*_*ful 10 c math objective-c integer-division

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

int i = 12;
int o = (60 / (i * 50)) * 1000;
Run Code Online (Sandbox Code Playgroud)

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

这也等于0.

int o = 60 / (i * 50) * 1000;
Run Code Online (Sandbox Code Playgroud)

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

int o = 60 / i * 50 * 1000;
Run Code Online (Sandbox Code Playgroud)

什么在我头顶飞过?

谢谢,
尼克

Hig*_*ark 19

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

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

60 / (i * 50) * 1000
Run Code Online (Sandbox Code Playgroud)

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

60 / i * 50 * 1000
Run Code Online (Sandbox Code Playgroud)

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

  • 严格来说,结果不是四舍五入的,而是截断的. (6认同)
  • @Jonathan对不起,但要准确了解这些事情是有帮助的.截断是一种舍入方式,整数除法是浮点除法的一种形式.你可以看到,不知道差异会让你陷入困境. (4认同)
  • 当然也是C. Objective-C中的算术与C中的算术相同.:) (3认同)