2012-08-15 498 views
14

這可能是一個簡單的解決方案,但我無法修復它。整數除法後浮點數爲0

我除以2點的整數:

finishedGameFinalScore = [score integerValue]; 
CGFloat interval = 2/finishedGameFinalScore; 
NSLog(@"interval = %f",interval); 

日誌返回0.000000

是否有小數的限制嗎?我需要保留十進制結果。

感謝 沙尼

+1

'CGFloat的finishedGameFinalScore = [得分的floatValue];''CGFloat的間隔= 2.0F/finishedGameFinalScore;' – janusbalatbat 2012-08-15 12:30:10

+1

你必須通過一個浮動指針數目來劃分以獲得一個浮點數。 – Joe 2012-08-15 12:31:16

+1

對於每種基於C的語言都是如此。將兩個整數相除會得到一個整數。 – borrrden 2012-08-15 12:32:18

回答

71

您的代碼不工作的原因是,你將一個整數被另一個整數,然後鑄造結果爲float。

所以你有2(一個整數)和一些其他數字(也是一個整數)。然後你除以2這個數字 - 這可能是大於2.假設它是3.

Integer見2/3,他就像「0.66666667?Pshh,沒有人需要小數點後任何東西」。所以他截斷了它。你只有0.

然後Integer給數字先生float和先生float是超級開心得到一個數字!他就像「好吧,0!我要添加所有重要的數字」。這就是你最終得到0.0000000的結果。

所以是的,只是先投到一個浮動。甚至是雙倍!

enter image description here

+0

即使只是'CGFloat interval = 2.0/finishedGameFinalScore;'(add '.0')。作爲'2。0'是'CGFloat',結果將是一個'CGFloat'保存所有的小數。 – 2016-02-16 15:07:21

12

@達斯汀說ü將需要類型轉換分頻器值浮動,因爲它去浮法它顯示整數值

案例1:強制轉換

NSString *score = @"3"; 
int interval = [str intValue]; 
CGFloat interval = (2/(float)interval); 
NSLog(@"interval = %.2f",interval); 

CASE 2:無需類型轉換

NSString *score = @"3"; 
float interval = [str floatValue]; 
CGFloat interval = (2/interval); 
NSLog(@"interval = %.2f",interval); 
8

正是在這種情況下,會做的伎倆的F-提示添加到數字2。

CGFloat interval = 2.0f/finishedGameFinalScore; 

所有上面/下面的答案都是正確的,完全解釋了爲什麼這項工作。

+0

通常情況下,如果已經有兩個答案,除非添加重要的重要數據,否則不會將其添加爲新答案。如果你認爲它真的增加了一些東西,你可以在問題或其他答案上發表評論。但我會爲它+1,因爲你是新的。 – Dustin 2012-08-15 16:40:47

0

只是從1.0開始分配長值並分配給浮點型變量。

unsigned long l1 = 65536; 
unsigned long l2 = 256; 
float f = (l1/1.0)/(l2/1.0); 

NSLog(@"%f",f);