30 votes

Comment créer un NSMutableArray de valeurs à virgule flottante

Je suis nouveau dans le développement d'Objective-C et d'iPhone, et j'essaie de stocker des valeurs à virgule flottante dans un NSMutableArray, mais quand je le fais, j'obtiens une erreur disant "type incompatible pour l'argument 1 de 'addObject". Qu'est-ce que je fais mal? J'essaie de créer un tableau de doubles avec lequel je peux effectuer des calculs mathématiques.

62voto

Ryan Townshend Points 2027

NSMutableArray ne contient que des objets, vous voulez donc qu'un tableau soit chargé avec des objets NSNumber. Créez chaque NSNumber pour contenir votre double puis ajoutez-le à votre tableau. Peut-être quelque chose comme ça.

 NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
 

Répétez au besoin.

12voto

Sijmen Mulder Points 1935

Utiliser un NSNumber pour envelopper votre flotteur, parce que le dictionnaire a besoin d'un objet:

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];

récupérer en envoyant floatValue:

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];

Le Code n'est pas testé.

Vous pouvez emballer de nombreux autres types de données dans NSNumber trop, vérifiez la documentation. Il y a aussi NSValue pour certaines structures comme NSPoint et NSRect.

7voto

Jason Coco Points 52303

Dans le Cacao, le NSMutableDictionary (et de toutes les collections, vraiment) besoin d'objets de valeurs, de sorte que vous ne pouvez pas tout simplement passer à un autre type de données. Comme les deux sjmulder et Ryan a suggéré, vous pouvez envelopper vos valeurs scalaires dans les instances de NSNumber (pour le nombre) et NSValue pour d'autres objets.

Si vous êtes représente un nombre décimal, quelque chose comme un prix, je suggère également à la recherche et à l'aide de NSDecimalNumber. Vous pouvez alors éviter de virgule flottante de l'inexactitude des questions, et vous pouvez généralement utiliser et de stocker la "valeur" comme un NSDecimalNumber au lieu de représenter avec une primitive dans le code.

Par exemple:

// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray*  prices= [[NSMutableArray array] retain];

// ...

[prices addObject:price];

1voto

Sanjay Kakadiya Points 26
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];

NSlog(@"my array is--%@",muArray);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X