Как получить неформатированное строковое представление NSDecimal или NSDecimalNumber? - PullRequest
5 голосов
/ 29 ноября 2009

У меня есть NSDecimal и мне нужно это как техническая строка, то есть без форматирования. Плавающая точка должна быть "." если есть, и знак минус должен быть просто "-", если есть. кроме того, не должно быть никакого форматирования, такого как группировка или китайские числа.

Я искал 2 часа в SDK, но, похоже, ничего простого сделать не удалось. Есть ли для этого решения?

Ответы [ 4 ]

7 голосов
/ 29 ноября 2009

Для NSDecimal вы можете использовать NSDecimalString с указанным языковым стандартом:

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *decimalString =  NSDecimalString(&decimalValue, usLocale);
[usLocale release];

В стандарте США используется точка для десятичного разделителя, а не разделитель тысяч, поэтому я считаю, что вы получите тот формат, который вам нужен.

Как уже отмечали другие, для NSDecimalNumber вы можете использовать -descriptionWithLocale: метод с указанным выше языковым стандартом США. Это не теряет никакой точности.

4 голосов
/ 29 ноября 2009

NSDecimalNumber

NSLog(@"%@", [theNumber stringValue]);

NSDecimal

NSLog(@"%@", NSDecimalString(&theDecimal, nil));
3 голосов
/ 29 ноября 2009

NSDecimalNumber является подклассом NSNumber, который имеет метод -stringValue.

stringValue

Возвращает получателя значение в виде удобочитаемой строки.

- (NSString *)stringValue

Возвращаемое значение

Значение получателя как удобочитаемая строка, созданная вызывая descriptionWithLocale: где локаль nil.

descriptionWithLocale:

Возвращает строку, которая представляет содержимое получатель для данной локали.

- (NSString *)descriptionWithLocale:(id)aLocale

Параметры aLocale

объект содержащий информацию о локали с который форматировать описание. использование nil если вы не хотите описание отформатирована.

Просто позвоните [theNumber stringValue].

0 голосов
/ 29 ноября 2009

Используйте decimalNumberWithString из класса NSDecimalNumber:

NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithMantissa:12345
                                                        exponent:-100
                                                      isNegative:YES];
NSDictionary *local = nil;
NSString *ds = [dn descriptionWithLocale: local];
NSLog(@"dn: %@", dn);
NSLog(@"ds: %@", ds);

dn: -0.00000000000000000000000 … 0000000000000000000000000000000000012345
ds: -0.00000000000000000000000 … 0000000000000000000000000000000000012345
...