Подтвердить что ты не робот

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: правильно?

4b9b3361

Ответ 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];