Десятичное значение NSNumber для примитивного значения C?

Я хочу преобразовать десятичное число NSNumber в int или другую форму, с которой я могу выполнять математические операции. Вот аннотированный код для моего проекта:

NSNumber *Left = [left valueForOutputKey:@"Y"];

Эта строка получает Quartz Composer Outlet, обычно со значением около 0,512.

По сути, я хочу умножить это на 10, а затем выполнить некоторые операции, такие как больше и меньше, чтобы увидеть, в каком диапазоне оно находится.


person Josh    schedule 25.10.2011    source источник


Ответы (2)


Поскольку похоже, что вы имеете дело с дробным компонентом, вы хотите преобразовать его в число с плавающей запятой или двойное число для выполнения ваших операций, в зависимости от того, насколько большим вы ожидаете это значение. С плавающей запятой должно быть все в порядке, если вы не имеете дело со смехотворно большими или точными числами. Вот как это будет выглядеть, например:

float lValue = [[left valueForOutputKey:@"Y"] floatValue];

lValue *= 10;

if (lValue < 10) {
    // do whatever
}
else if (lValue > 50) {
    // do whatever
}

Затем, чтобы сохранить значение обратно в вашей розетке или где-то еще, вы упаковываете его обратно в NSNumber:

NSNumber *newValue = [NSNumber numberWithFloat:lValue];

[left setValue:newValue forKey:@"Y"];

Возможно, вам придется преобразовать newValue в строку, чтобы отобразить ее в элементе управления, просто используйте для этого [newValue stringValue].

person Francis McGrew    schedule 25.10.2011
comment
Не забудьте разделить его на 10 перед сохранением, иначе вы обнаружите, что число экспоненциально увеличивается. - person Peter Hosey; 25.10.2011
comment
Верно — это просто код-заполнитель, основанный на том, что он спрашивал. - person Francis McGrew; 25.10.2011
comment
Спасибо - это было большим подспорьем :) - person Josh; 29.10.2011

Используйте один из методов NSNumber:

int leftInt = [Left intValue];
float leftFloat = [Left floatValue];
double leftDouble = [Left doubleValue];
person ayoy    schedule 25.10.2011
comment
Справедливое замечание, извините. В любом случае это нормально, как способ преобразования десятичного NSNumber в целое число. - person ayoy; 25.10.2011
comment
Спасибо - я интегрировал это в свою систему :) - person Josh; 29.10.2011