我正在尝试计算 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;
什么在我头上飞来飞去?
谢谢,
尼克
我正在尝试计算 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;
什么在我头上飞来飞去?
谢谢,
尼克
在 Objective-C/中对整数参数执行整数除法,因此 4/5 被截断为 0,3/2 被截断为 1,依此类推。您可能希望在执行除法之前将一些数字转换为浮点形式。
您还遇到了优先级问题。在表达式中
60 / (i * 50) * 1000
首先计算括号内的项,因此 60 除以 600,得到结果 0。在
60 / i * 50 * 1000
第一个操作是将 60 除以 12,得到结果 5,然后进行乘法运算。
一个整数除以一个整数是一个整数。
所以60/600不是0.1,它是0。
转换(或声明)一些东西float。
它正在做整数数学。60 / (12 * 50) 为 0.1,截断为 0。
如果您强制浮点然后转换回整数应该可以工作。
int o = (int)(60.0 / ((double) i / 50.0) * 1000.0;
可能并不是真的有必要让所有东西都翻倍。
代替:
int o = (60 / (i * 50)) * 1000;
和:
int o = 1200/i;
按优先顺序,操作:
60 / (12 * 50)
在乘以之前执行1000。
该值小于 1 并被强制转换为int,从而将其截断为0。和0时代任何东西都是0。
使用 afloat或先乘以1000确保不会0在计算中传播 a 。
表达式中的所有操作都以整数算术执行,这意味着每个中间结果的小数部分都被截断。这意味着如果将较小的整数除以较大的整数,您将始终得到 0。
要获得您想要的结果,您必须确保以特定顺序执行操作,或者您必须使用浮点数。例如结果
int o = (60.0 / (i * 50.0)) * 1000.0;
应该是 o = 100。
我认为你需要在这里使用 float 而不是 int。它会按照你想要的方式工作!也会给你十进制的答案。