2011-10-28 31 views
2

我設置了一個計算器,將在用戶輸入後生成一個浮點數。舉個例子:如果生成的答案是1.75,那實際上代表1.75小時。我想把答案分成兩部分來閱讀1小時。 45分鐘,這將比一小時的0.75更方便用戶使用。從浮點數目標的客觀c我想分派小數做進一步的數學工作

所以我需要能夠小數點之前刪除整個數字(S)(在這個例子中,「1」)使用0.75 --kind像這樣得到一個變量值:

MIN =(0.75×60),這會給我45分鐘數把我的......這個

[NSString stringWithFormat:@"@% hr. @% min", hRs, mIn];類型聲明

任何幫助將不勝感激。

回答

0

您可以將浮點值轉換爲一個int值並從該值中減去該值,或者您可以將其浮置。

float time = 1.75; 
int minutes = (time - (int)time) * 60; //or (time - floor(time)) * 60; 

NSLog(@"Time: %@", [NSString stringWithFormat:@"%d hr. %d min", (int)time, minutes]); 
+0

謝謝,不過,我對xcode相當陌生......並且我對演員陣容有所瞭解(從未使用過),我也不瞭解「地板」這個詞。是否有可能在每個適用的情況下進行簡短的discrption。你演示過的例子是? – Rob

+2

floor()是一個c庫函數:舍入到最大整數值不大於數字。 – zaph

+0

演員表演有兩種方式,最好是獲得一本「C」語言書籍並對其進行研究,Objective-C是「C」的補充。 – zaph

1

使用floor(floatValue)來獲得整數部分,從floatValue中減去得到小數部分。

例:

float floatValue = 1.75; 
float integerPortion = floor(floatValue); 
float decimalPortion = floatValue - integerPortion; 

NSString *timeString = [NSString stringWithFormat:@"%.0f hr. %.0f min", integerPortion, decimalPortion * 60]; 
NSLog(@"timeString: %@", timeString); 

的NSLog輸出:

timeString: 1 hr. 45 min 
3

你幾乎肯定不希望使用float來存儲用戶輸入的數字,尤其是對於一個計算器。這將導致十進制/二進制舍入錯誤,這會使你瘋狂。您希望使用NSDecimalNumber進行此類工作。

這裏的其他答案將工作,但你想用decimalNumberByRoundingAccordingToBehavior:替換floor()。您將使用NSDecimalNumberHandler,其舍入模式爲NSRoundDown,合適的scale(可能爲您的目的爲2或3)。