Objective-c конвертировать Long и float в String
Мне нужно преобразовать два числа в строку в Objective-C.
Один - это длинное число, а другое - float.
Я искал в Интернете решение, и каждый использует stringWithFormat:
, но я не могу заставить его работать.
Я пытаюсь
NSString *myString = [NSString stringWithFormat: @"%f", floatValue]
для 12345678.1234 и получите "12345678.00000" как вывод
и
NSString *myString = [NSString stringWithFormat: @"%d", longValue]
Может кто-нибудь показать мне, как использовать stringWithFormat: правильно?
Ответы
Ответ 1
В этой статье обсуждается, как использовать различные строки форматирования для преобразования чисел/объектов в экземпляры NSString:
Руководство по программированию строк: форматирование строковых объектов
Которые используют указанные здесь форматы:
Руководство по программированию строк: спецификаторы формата строки
Для вашего поплавка вам нужно:
[NSString stringWithFormat:@"%1.6f", floatValue]
И для вашего долгого:
[NSString stringWithFormat:@"%ld", longValue] // Use %lu for unsigned longs
Но, честно говоря, иногда проще просто использовать класс NSNumber
:
[[NSNumber numberWithFloat:floatValue] stringValue];
[[NSNumber numberWithLong:longValue] stringValue];
Ответ 2
floatValue должен быть двойным. По крайней мере, это правильно компилируется и делает то, что ожидается на моей машине
Поплавки могут хранить только около 8 десятичных цифр, а ваш номер 12345678.1234 требует большей точности, чем это, поэтому только в 8 наиболее значимых цифрах хранятся в поплавке.
double floatValue = 12345678.1234;
NSString *myString = [NSString stringWithFormat: @"%f", floatValue];
приводит к
2011-11-04 11:40:26.295 Test basic command line[7886:130b] floatValue = 12345678.123400
Ответ 3
Вы должны использовать NSNumberFormatter, например:
NSNumberFormatter * nFormatter = [[NSNumberFormatter alloc] init];
[nFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *num = [nFormatter numberFromString:@"12345678.1234"];
[nFormatter release];