2010-08-02 7 views
5

¿Cómo alrededor de un NSNumber a espacios decimales cero, en la siguiente línea que parece mantener los espacios decimales:¿Cómo alrededor de un NSNumber a cero espacios decimales

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

http://stackoverflow.com/questions/576110/nstimeinterval-to-readable-nsnumber duplicado –

Respuesta

2

Si sólo necesita un entero por qué no sólo tiene que utilizar un int

int holidayNightCount = (int)sHolidayDuration.value; 

Por definición un int no tiene cifras decimales

Si es necesario utilizar NSNumber, que sólo podría emitir el doble de INT y luego usar el int para crear su NSNumber .

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

piso es más probable que el comportamiento deseado –

+0

@JoshuaWeinberg Técnicamente esto se debe truncar, que es el mismo que el piso. – csga5000

+1

El piso y el truncamiento son diferentes para los negativos. –

14

Fundición a truncado int. Por ejemplo, 3.4 se convierte en 3 (como se desea), pero 3.9 se convierte en 3 también. Si esto ocurre, añadir 0,5 antes de emitir

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

Esa es una forma tan ingeniosa de sortear la ronda. Nunca pensé en hacerlo de esa manera debido a las herramientas integradas de redondeo en ios. Me gusta esta respuesta en gran medida para estar pensando. – Rob

+0

Esto realmente no funcionaría con números negativos aunque – oztune

12

Aquí hay un poco de un enfoque de largo aliento

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

Esto es más de lo que estaba buscando. En mi caso, quería uno o dos lugares decimales, y en este sentido, este método es más poderoso. – csga5000

1

también se puede hacer lo siguiente: int roundedRating = (int) y vuelta (rating.floatValue);

0

piso el número con el piso función C de edad() y luego se puede crear una NSInteger que es más adecuado, consulte: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/floor.3.html ....

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

más información sobre el tema aquí: http://eureka.ykyuen.info/2010/07/19/objective-c-rounding-float-numbers/

O podría utilizar las características NSDecimalNumber para redondear números.

Cuestiones relacionadas