[英]Objective-C Integer Arithmetic
我正在嘗試計算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,依此類推。 在執行除法之前,您可能希望將一些數字轉換為浮點形式。
您還遇到了優先問題。 在表達中
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;
可能沒有必要讓一切都變成雙倍。
我認為你需要在這里使用float而不是int。 它將以你想要的方式工作! 也會給你小數回答。
按優先順序,操作:
60 / (12 * 50)
在乘以1000
之前執行。
此值小於1並轉換為int
,將其截斷為0
。 並且0
次是0
。
使用float
或首先乘以1000
以確保在計算中不會傳播0
。
表達式中的所有操作都以整數運算執行,這意味着每個中間結果的小數部分都會被截斷。 這意味着如果將較小的整數除以較大的整數,則總是得到0。
要獲得您想要的結果,您必須確保以特定順序執行操作,或者必須使用浮點數。 例如,結果
int o = (60.0 / (i * 50.0)) * 1000.0;
應該是o = 100。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.