我正在尝试计算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;
我头顶飞过什么?
谢谢,
尼克
答案 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
,将其截断为0
。 0
次0
次float
。
使用1000
或首先乘以0
,以确保您最终不会在计算中传播{{1}}。
答案 5 :(得分:0)
表达式中的所有操作都以整数运算执行,这意味着每个中间结果的小数部分都会被截断。这意味着如果将较小的整数除以较大的整数,则总是得到0。
要获得您想要的结果,您必须确保以特定顺序执行操作,或者必须使用浮点数。例如
的结果int o = (60.0 / (i * 50.0)) * 1000.0;
应为o = 100.
答案 6 :(得分:0)
我认为你需要在这里使用float而不是int。它将以你想要的方式工作!也会给你小数答案。