2011-12-20 12 views

Respuesta

46

Puede especificar lo que desee con formato de cadena:

[NSString stringWithFormat:@" %.0f : %.0f", (audioPlayer.currentTime), 
              (audioPlayer.duration)]; 
+1

Esto es útil. Cambiar el valor antes de la 'f' cambia los lugares decimales. por ejemplo: 1.2345 ->% .0f = 1 ->% .2f = 1.23 –

+0

Esta es una buena solución. – Jessedc

+0

Con esta respuesta, debe tener en cuenta que los valores son [redondeados] (http://stackoverflow.com/questions/17986616/decimal-value-rounding-off-to-next-higher-value-in-ios) si usas stringWithFormat. –

4

floorf() es la función que se está buscando.

3

moldeada a int:

[NSString stringWithFormat:@" %i : %i",(int)(audioPlayer.currentTime),(int)(audioPlayer.duration) ]; 

casting como esto siempre redondea hacia abajo (por ejemplo: sólo elimina todo tras el punto decimal). Esto es lo que pediste.

En el caso de redondeo al número entero más cercano que desea añadir 0,5 al número

[NSString stringWithFormat:@" %i : %i",(int)(audioPlayer.currentTime+0.5f),(int)(audioPlayer.duration+0.5f) ]; 

Este redondeará al número entero más próximo. por ejemplo: 1.2 se convierte en 1.7 y el fundido en int hace 1. 3.6 se convierte en 4.1 y el casting hace 4. :)

+0

hay necesidad de emitir –

+0

Bueno ... no, pero eso es lo que realmente está haciendo . Un flotante sin decimales (sin coma flotante) es un número entero. Aprendí así porque ayuda a comprender los procesos y lo que está sucediendo. La próxima vez que OP quiera hacer un float desde un int, sabrán cómo hacerlo. '.2i' no funcionará! –

0

Todo lo que necesita hacer es convertir el doble a un int, como lo siguiente: int currentTime_int = (int)audioPlayer.currentTime;.

Puede usar este mismo enfoque para la otra variable.

+0

sin necesidad de emitir –

3

que está después

[NSString stringWithFormat:@" %.00f : %.00f",(audioPlayer.currentTime),(audioPlayer.duration) ]; 

Cuando el formateo de flotador se puede decir de la precisión por el número antes de la f

2

Por qué no solo arrojar el audioPlayer.currentTime a un número entero antes de usar stringWithFormat?

[NSString stringWithFormat:@"%d", (int)(audioPlayer.currentTime)]; 
0

Muchas de las respuestas más cortas aquí funcionarán correctamente. Pero si usted quiere que su código sea muy clara y fácil de leer, es posible que desee especificar explícitamente su conversión deseada del flotador a int, tales como el uso de:

int tmpInt = floorf(myFloat); // or roundf(), etc. 

y luego por separado especificar cómo desea que el número entero formateado, por ejemplo,

... stringWithFormat:@"%d", tmpInt ... // or @"%+03d", etc. 

en lugar de asumir que un reparto en línea muestra lo que desea.

4

Si desea que esta para su visualización, use un :

double sevenpointthreefourfivesix = 7.3456; 
NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0]; 
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:sevenpointthreefourfivesix]]); 

2011-12-20 20:19:48.813 NoDecimal [55110: 903] 7

Si desea un valor sin la parte fraccionaria, utilice round(). Si desea el valor entero más cercano no mayor que que el valor original, use floor().

0

También puede utilizar

doble newDvalue = piso (dValue);

que eliminará todas las decimales señalan

usando .0f% de formato de cadena será bueno también

Cuestiones relacionadas