Я принимаю NSString как
NSString *value = [valuelist objectAtIndex:valuerow];
NSString *value2 = [valuelist2 objectAtIndex:valuerow2];
от UIPickerView. Я хочу
double *cal = value + (value2 * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%@",cal];
Я должен смочь получить строку в сообщении после того, как я сделаю вычисления на нем.. Помогите Моей программе, отказывает
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];
Вы не должны все время конвертировать между числами типа double и string, так как это имеет тенденцию к потере точности (в общем, вы должны быть очень осторожны , если вы этого не сделаете. хочу потерять точность).
Например, nextafter (1.0,2.0)
возвращает наименьшее двойное значение больше 1 (точно 1.0000000000000002220446049250313080847263336181640625, но мы довольны результатом 1.0000000000000002). Форматирование с помощью «% g» просто возвращает «1».
Мы ожидаем, что NSNumber поступит правильно, но [[NSNumber numberWithDouble: nextafter (1,2)] stringValue]
также возвращает «1». Согласно документам, - [NSNumber stringValue]
вызывает [self descriptionWithLocale: nil]
, который форматирует его с помощью "% 0.16g". Этого не достаточно. Однако мы получаем правильный ответ, форматируя "% .17g". Я думаю, что "% .17g" достаточно при условии, что двойники являются 64-битными двойниками IEEE 754 и библиотеки работают правильно, но нет никакой гарантии.
В конце концов, нет никакой гарантии, что [[NSString (hidden) doubleValue] == n
.
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; NSString *message =[[NSString alloc] initWithFormat:@"%g",cal]; // do work with message [message release];