Преобразовать значение с плавающей запятой в двойное в цели c

Я использую приведение для преобразования строки в int, строку в двойную, и это работает.

Теперь я хочу преобразовать значение с плавающей запятой в двойное, и xcode скажет мне:

"Указатель не может быть приведен к типу "двойной"",

Моя переменная с плавающей запятой объявлена ​​​​в .h

@property float *valueX, *valueY

И в .м я делаю:

double dou = (double) valorX;

Что здесь происходит? Спасибо!


person user2958588    schedule 08.07.2014    source источник


Ответы (2)


Не совсем уверен, что вы здесь спрашиваете, но я предполагаю, что проблема заключается в * в свойствах поплавка.

Свойство float должно быть объявлено как...

@property float valueX;

нет

@property float *valueX;

(если это не указатель на поплавок, но я сомневаюсь, что это так)

Примечание

Вероятно, вам следует сделать что-то вроде этого...

@property (nonatomic, assign) CGFloat valueX;
person Fogmeister    schedule 08.07.2014
comment
ДА, моя проблема была в * .. но спасибо за ответ :D - person user2958588; 09.07.2014
comment
@user2958588 user2958588 да, вот мой ответ. Я специально показал, что не следует использовать файлы *. Другой ответ неверный. Просто говорю. Пока единственный правильный ответ на этот вопрос мой. - person Fogmeister; 09.07.2014
comment
на самом деле, я просто обратил внимание, когда прочитал: * ... и сказал себе: «Что.?». Я забыл выйти из * -_- ,, эй, но вы можете помочь с этим: stackoverflow.com/questions/24636304/ - person user2958588; 09.07.2014

Вы объявляете valueX как float *, что означает указатель на число с плавающей запятой.

Вам нужно сначала разыменовать указатель, чтобы получить содержащееся в нем значение с плавающей запятой, а затем привести результат к двойному

double dou = (double)(*valueX);

Вы также можете думать об этом как о двухэтапном процессе.

float tempFloat = *valueX;
double dou = (double) tempFloat;

Если вы не хотели объявлять valueX как float *, измените объявление на float.

person Eric J.    schedule 08.07.2014
comment
Я думаю, что в этом случае * была ошибка в первую очередь. Судя по описанию на постере, ей нужен простой примитив. - person Dima; 09.07.2014
comment
-_- Я такого не видел... * - person user2958588; 09.07.2014
comment
@user2958588 user2958588 Я бы посмотрел, какой ответ на самом деле правильный, прежде чем принимать их :-) - person Fogmeister; 09.07.2014