2015-04-22 4 views
-1

Je change un code pré-écrit et une vidéo TimeLabel est formaté comme ceci:NSString formatage

return [NSString stringWithFormat:@"%2d:%0.2d", minutes, seconds]; 

Ce qui se passe est le si le minutes est un seul chiffre, il est de retour un espace avant, par exemple, 4:49 a un espace avant le 4. Comment formater pour qu'il y ait 2 caractères dans la chaîne si les arguments minutes sont 2 chiffres, mais seulement 1 caractère si minutes est 1 chiffre?

+0

votre résultat final devrait être m: ss? –

+0

Dites «man printf» dans le terminal. Lis. – matt

+0

Lire les spécifications. –

Répondre

1

Vous voulez ce qui suit:

return [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 

simplement en utilisant %d indique le nombre de chiffres en revanche il a besoin. Et le seconds ne devrait pas avoir un nombre décimal. Le %02d dit d'afficher avec au moins deux chiffres et gauche remplir avec des zéros de tête pour s'assurer qu'il y a deux chiffres si nécessaire.

+0

En fait, le nombre avant la valeur décimale est pour le remplissage avec l'espace et le nombre après la décimale pour le remplissage avec des zéros. Par exemple avec var myInt = Int (13), NSString (format: "% 3d", myInt) = "13" (un espace principal), NSString (format: "% .3d", myInt) = "013", NSString (format: "% 3.3d", myInt) = "013" et NSString (format: "% 5.3d", myInt) = "013" (deux espaces principaux) – rockhammer

+0

@rockhammer Ce que j'ai posté fonctionne très bien. Ce que vous avez posté est normalement utilisé avec des nombres pointant flottants et le spécificateur '% f'. – rmaddy

+0

Compris. C'est juste que pratiquement toutes les solutions postées sur la conversion de NSTimeInterval en format lisible par l'homme utilisent quelque chose comme 'return NSString (format:"% 0.2d:% 0.2d:% 0.2d.% 0.3d ", heures, minutes, secondes, ms) 'comme celui-ci http://stackoverflow.com/a/28872601/1827488. Et je viens de découvrir que cette convention décimale pour '% d' ne fonctionne pas sur Android/Java comme je le code du port là-bas. – rockhammer