2011-01-17 2 views
2

Comment atteindre les objectifs suivants dans l'objectif-c?Arrondir les grands entiers - objectif-c

Commencez avec un nombre entier compris entre 0 et 999,999,999. Et finir avec un nombre entier y. Si x est entre 0 et 9999, alors y = x Sinon, x devient quelque chose comme 45k (représentant 45 000) ou 998m (représentant 998 millions). En d'autres termes, utilisez les caractères "k" et "m" pour garder y inférieur ou égal à 4 caractères.

Répondre

2

ne arrondit mais coupe tout simplement de:

NSString *text; 
if (x >= 1000000) text = [NSString stringWithFormat:@"%dm",x/1000000]; 
else if (x >= 1000) text = [NSString stringWithFormat:@"%dk",x/1000]; 
else text = [NSString stringWithFormat:@"%d",x]; 

solution Arrondi:

NSString *text; 
if (x >= 1000000) text = [NSString stringWithFormat:@"%.0fm",x/1000000.0f]; 
else if (x >= 1000) text = [NSString stringWithFormat:@"%.0fk",x/1000.0f]; 
else text = [NSString stringWithFormat:@"%d",x]; 

Si vous voulez plus de précision, utilisez float et %.1f etc.

+0

sera-ce probablement autour? par exemple, 459 861 sera 460k? – CodeGuy

+0

Non, il sera coupé - ne devrait pas être difficile à faire arrondir (utiliser float ou double avant la division, et le format avec% 0f). – Eiko

+0

pouvez-vous mettre à jour le code pour cela? Je ne suis pas sûr de comprendre. Merci! – CodeGuy

2
thousands = x/1000; 
millions = thousands/1000; 
billions = millions/1000; 

if(billions) 
    sprintf(y, "%dB", billions); 
else if(millions) 
    sprintf(y, "%dM", millions); 
else if(thousands) 
    sprintf(y, "%dK", thousands); 
else 
    sprntf(y, "%d", x); 
+1

Vos affectations sont erronées. – Eiko

+0

que voulez-vous dire? – hhafez

+1

L'opérateur modulo ne donnera pas des milliers, des millions et des milliards. Vous devez utiliser la division. – Eiko

0
NSString *y = nil; 

// If Billion 
if (x >= 1000000000) y = [NSString stringWithFormat:@"%.0fB", x/1000000000]; 
// If Million 
else if (x >= 1000000) y = [NSString stringWithFormat:@"%.0fM", x/1000000]; 
// If it has more than 4 digits 
else if (x >= 10000) y = [NSString stringWithFormat:@"%.0fK", x/1000]; 
// If 4 digits or less 
else y = [NSString stringWithFormat:@"%d", x]; 

Mise à jour: Ajouté le 'else' manquant, sinon il n'obtiendrait pas de nombres avec moins de 4 chiffres.

+0

% .0d n'a pas de sens. Et comptez le nombre de zéros correctement. – Eiko

+0

Quel est le problème avec les zéros? 9 pour milliards, 6 pour millions, 3 pour mille? Qu'est-ce que je rate? – vfn

+0

Wow ... juste vu le% .0d, c'était censé être% .0f, parce que j'ai enlevé le rond. C'est édité maintenant, merci! – vfn

Questions connexes