2010-06-08 10 views
1

Я работаю с чужим кодом, и есть поплавок с некоторыми необычными качествами.Как определить формат поплавка?

Если я выход поплавок с помощью:

NSLog(@"theFloat: %f", record.theFloat); 

я получаю:

theFloat: 0.000000 

Однако, если я использую:

NSLog(@"(int)theFloat = %i", (int) record.theFloat); 

я получаю:

(int)theFloat: 71411232 

Как узнать реальный формат и значение Float? Я знаю, что он должен содержать большое количество.

Кстати, класс Record, который содержит поплавок propertizes его таким образом:

@property (assign) float* theFloat; 

Существует также floatLength:

@property (assign) int floatLength; 

И имеет этот метод, который, кажется, показывают, что float имеет переменную длину (?):

- (void) copyFloat:(float*)theF ofLength:(int)len 
{ 
    float *floatcopy = malloc(len*sizeof(float)); 
    memcpy(floatcopy, theF, len*sizeof(float)); 
    self.theFloat = floatcopy; 
} 
+0

адрес в памяти, где поплавок хранится по формуле: (межд) theFloat: 71411232 – Cobusve

+3

'float' хорошо определен, но вы работаете с массивом поплавков так ваш' NSLog' называет просто напечатайте адрес массива. Какова цель записи? – drawnonward

ответ

-1

Адрес в памяти, где f loat хранится определяется по формуле: (межд) theFloat: 71411232 Вы, вероятно, хотите использовать что-то вроде:

NSLog(@"theFloat = %f", (*record.theFloat)); 

Какой будет разыменовать указатель и дать вам фактические данные.

+0

Это совершенно неправильно. Кастинг в int будет усекать float в целое число. В терминах C++ это 'static_cast', а не' reinterpret_cast'. И это только печатает первое значение 'len'. –

+0

Это было немного грубо, я бы сказал. Я удалил комментарий в конце, но плакат сказал, что у него возникла проблема с «плавающей точкой», и я просто взял его код, который напечатал единственное значение, адрес массива и добавил разыменование, поскольку ясно, что он хочет для печати значения, а не адреса. Я бы сказал, что комментарий в конце неправильный, основная часть ответа выглядит просто замечательно, конечно, если он хочет, чтобы все элементы внутри массива делали это так ... – Cobusve

0

Ваше поле, theFloat, не является примитивным типом, а указателем. float * означает, что это указатель на float. Вам нужно разыменовать поле, чтобы получить его значение.

Используйте * theFloat, чтобы получить фактическое значение.

Кроме того, я предлагаю вам ознакомиться со спецификаторами формата.

http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265

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