Странное поведение с NSUInteger - не может конвертировать в плавающее должным образом - PullRequest
4 голосов
/ 22 сентября 2010

Вот моя ситуация.Это сводит меня с ума:

У меня есть NSMutableArray со значением счетчика 517. У меня есть двойное значение, которое является моим множителем.

double multiplier = 0.1223;
double result = [myArray count] * multiplier; // 63 even (wrong!)

На самом деле это должно быть 63,2291.Если я пойду:

double result = [myArray count] * 0.1223; // 63.2291 (right!)

или ..

double result = 517 * multiplier; // 63.2291 (right!)

Имеет ли это какой-либо смысл для кого-либо?

Приложение:

вот мойФактическая функция:

- (double) getValueForPercentage:(double)percVal
{
   int adjustedCount = [originalData count] - 1;
   double final = percVal * (double)adjustedCount;
   return final;
}

Я никогда не получит никаких цифр после запятой, когда я это сделаю.Это работает , однако работает, если я избавлюсь от "-1", а-ля:

- (double) getValueForPercentage:(double)percVal
{
   int adjustedCount = [originalData count];
   double final = percVal * (double)adjustedCount;
   return final;
}

Конечно, мне нужно иметь -1.

Второе добавление:

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

int pointCount = [srcData getDayCount];

for (int i = 0; i < pointCount; i++) {
   double progress = (double)i/(double)(pointCount - 1);
   double satv = [srcData getValueForPercentage:progress];
   // satv is always a number without any digits beyond the decimal
}

1 Ответ

1 голос
/ 18 января 2011

Ну, когда у меня начались эти проблемы, я немного осмотрелся и не нашел причины или объяснения.

Теперь я делаю, чтобы все стало NSNumber, а затем вызываю doubleValue. Это должно привести к результатам, которые вы ищете:

NSNumber * pointCount = [NSNumber numberWithUnsignedInt: [srcData getDayCount]];
for (NSInteger i = 0; i < [pointCount intValue]; i++) {
    NSNumber * count = [ NSNumber numberWithInt: i ];
    double progress = [count doubleValue]/[pointCount doubleValue] - 1.0;
    double satv = [srcData getValueForPercentage:progress];
    // satv is always a number without any digits beyond the decimal
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...