2013-12-22 2 views
0

У меня есть следующая строка кодаIOS NSNumber инвалидных операндов бинарного выражения (NSNumber *»и„двойной“)

NSNumber *myValue = loadTempValue*0.420; 

где я пытаюсь установить значение *myValue к значению loadTempValue*0.420,

Однако я получаю ошибку

Invalid operands to binary expression ('NSNumber *" and 'double')

Может ли кто-нибудь посоветовать, как это сделать?

+0

Лучше вопрос, почему вы считаете, что это нормально, чтобы присвоить значение «double» указателю на объект? – rmaddy

+0

@rmaddy Прошу вас объяснить? – MrNeilM

ответ

3

кажется, что loadTempValue также NSNumber. В этом случае вы хотите:

NSNumber *myValue = @([loadTempValue doubleValue] * 0.420); 

Почему вы используете NSNumber объекты для этих значений?

Если loadTempValue был double вы просто могли бы сделать:

double myValue = loadTempValue * 0.42; 
+0

Спасибо. loadTempValue устанавливается NSNumber * loadTempValue = [defaults objectForKey: @ "tempValue"] ;. Я полагаю, что из ваших комментариев это неправильно? Если да, то каким образом я должен это делать? – MrNeilM

+0

Вы можете сделать: 'double loadTempValue = [defaults doubleForKey: @" tempValue "];'. Предполагая, что 'defaults' -' NSUserDefaults'. – rmaddy

+0

ОК. Да, это NSUserDefaults. Так это лучший (правильный) способ сделать это? И могу ли я спросить рассуждения?Просто, как если бы я более полно разбирался в рассуждениях, я скорее буду делать это правильно в будущем, и я должен помнить об этом! – MrNeilM

0

Try:

NSNumber *myValue = @([loadTempValue doubleValue] * 0.420);

или

NSNumber *myValue = [NSNumber numberWithDouble:([loadTempValue doubleValue] * 0.420)];

+0

Оба дают ту же ошибку? – MrNeilM

+0

Что такое 'loadTempValue'? – runmad

0

loadTempValue является NSNumber * и 0.420 является float. Вы пытаетесь размножить объект с помощью float, который компилятор не понимает.

Что вы хотите сделать, получите значение поплавка от loadTempValue, а затем умножьте его на 0.420. Вы делаете это таким образом:

[loadTempValue floatValue] * 0.420; 

Оттуда, кажется, что вы хотите поместить это значение обратно в NSNumber * объект, вы делаете это так:

@([loadTempValue floatValue] * 0.420); 

Синтаксис @(...) недавно был введен к цели-C. Это называется объектной литературой для чисел. Это сокращенный способ написания [NSNumber numberWithFloat: ...]

Наконец, вы захотите присвоить результат переменной myValue; вы можете сделать это следующим образом:

NSNumber *myValue = @([loadTempValue floatValue] * 0.420); 

 Смежные вопросы

  • Нет связанных вопросов^_^