我正在尝试计算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。 它会以你想要的方式工作! 也会给你小数回答。
以上就是c/c++开发分享Objective-C整数算术相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/549558.html