2010-08-02 19 views
5

如何圓一個NSNumber零小數位,在下面的行似乎保持小數位:如何圓一個NSNumber的零小數位

NSNumber holidayNightCount = [NSNumber numberWithDouble:sHolidayDuration.value]; 
+0

重複http://stackoverflow.com/questions/576110/nstimeinterval-to-readable-nsnumber – 2010-08-02 13:22:23

回答

2

如果你只需要一個整數爲什麼不只是使用int

int holidayNightCount = (int)sHolidayDuration.value; 

通過定義一個int沒有小數

如果你需要使用的NSNumber,你可以只投了一倍,達到INT,然後使用INT來創建你的NSNumber 。

int myInt = (int)sHolidayDuration.value; 
NSNumber holidayNightCount = [NSNumber numberWithInt:myInt]; 
+1

樓更可能是所需的行爲 – 2010-08-02 18:49:34

+0

@JoshuaWeinberg從技術上講,這應該截斷,這是一樣的地板。 – csga5000 2015-11-08 02:07:22

+1

底板和截斷對於底片是不同的。 – 2015-11-12 21:03:19

14

通常轉換爲int截斷。例如,3.4變成3(根據需要),但3.9變成3。如果發生這種情況,鑄造

int myInt = (int)(sHolidayDuration.value + 0.5); 
+1

這是一個迂迴圍繞這個機智的方式。我從來沒有想過這樣做是因爲在ios中使用舍入工具。我喜歡這個答案很多想法。 – Rob 2012-07-02 14:07:22

+0

雖然 – oztune 2016-09-21 21:42:52

12

前添加0.5這是一個有點長篇大論辦法

float test = 1.9; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setRoundingMode:NSNumberFormatterRoundHalfUp]; 
[formatter setMaximumFractionDigits:0]; 
NSLog(@"%@",[formatter stringFromNumber:[NSNumber numberWithFloat:test]]); 
[formatter release]; 
+0

這不會真正適用於負數,但這更符合我的需求。在我的情況下,我想要一個或兩個小數位,在這方面這種方法更強大。 – csga5000 2015-11-08 02:06:22

1

你也可以做到以下幾點:INT roundedRating =(int)的輪(rating.floatValue);

0

樓使用舊的C函數地板(),然後你可以創建一個NSInteger哪個更合適的號碼,請參閱: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/floor.3.html ....

NSInteger holidayNightCount = [NSNumber numberWithInteger:floor(sHolidayDuration.value)].integerValue; 

在這裏的主題的更多信息:http://eureka.ykyuen.info/2010/07/19/objective-c-rounding-float-numbers/

或者你可以使用NSDecimalNumber功能進行舍入數字。