2017-08-15 2 views
2

Disons que j'ai un objet NSNumber qui contient une valeur 0.12345. Tout ce que je veux est un objet NSNumber avec la même valeur, mais arrondi à un nombre spécifié de chiffres significatifs, disons 2, donc la valeur ressemble à ceci: 0.12.Arrondir NSnumber à un nombre spécifique de chiffres significatifs

  • Je ne veux pas le convertir en NSString et à l'arrière, ce qui est ce que certains the answers suggest
  • Je préférerais ne pas jeter/conversion et/ou faire la multiplication/division manuellement like in this answer

Existe-t-il un moyen évident de le faire pour que je manque?

+1

'NSNumber' ne possède aucune fonction d'arrondi intégrée. Vous pouvez utiliser 'NSDecimalNumber', ce qui est le cas. – dan

+3

Expliquez votre objectif un peu plus. Pourquoi avez-vous besoin d'arrondir le 'NSNumber'? – rmaddy

+2

"Je préférerais ne pas ..." - expliquer pourquoi vous ne voulez pas résoudre un problème mathématique avec les maths. Il y a beaucoup de réponses dans votre question liée, allant de mauvaise à bonne (les scores aideront à cela). – CRD

Répondre

2

Il est pratiquement impossible de le faire et de maintenir toutes vos contraintes. NSNumber n'a pas de méthodes d'arrondi, donc vous allez devoir convertir à autre chose. La voie évidente est de convertir en double et multiplier, arrondir et diviser, mais vous dites que vous préféreriez ne pas le faire. Ce qui laisse cette voie:

NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) { 
    NSDecimal d = number.decimalValue; 
    NSDecimal rd; 
    NSDecimalRound(&rd, &d, places, mode); 
    return [NSDecimalNumber decimalNumberWithDecimal:rd]; 
} 
+1

c'est le plus proche de ce que je l'ai eu l'esprit, merci – C0D3LIC1OU5

-1

Une autre façon aki est:

  1. Convertir votre numéro après tour multiplié par 100.

int yourNum = 0,12345 * 100; yourNum est maintenant 12.

  1. Ensuite, chaque fois que vous avez besoin du numéro suffit de diviser par 100.

flotteur yourNumF = yourNum/100,0;

Pas un fan de cette méthode moi-même, mais il correspond à vos besoins. : D