Я использую Cygwin в эмулятор терминала Poderosa .
Для NSDecimal вы можете использовать NSDecimalString с указанным языковым стандартом:
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *decimalString = NSDecimalString(&decimalValue, usLocale);
[usLocale release];
В региональных стандартах США в качестве десятичного разделителя используется точка, а не тысячи. separator, поэтому я считаю, что это даст вам тот тип форматирования, который вы ищете.
Как указывали другие, для NSDecimalNumber вы можете использовать метод -descriptionWithLocale: с указанным выше локалью США. Это не теряет точности.
NSLog(@"%@", [theNumber stringValue]);
NSLog(@"%@", NSDecimalString(&theDecimal, nil));
NSDecimalNumber
является подклассом NSNumber
, который имеет метод -stringValue
.
stringValue
Возвращает значение получателя значение в виде удобочитаемой строки.
- (NSString *) stringValue
Возвращаемое значение
Значение получателя как удобочитаемая строка, созданная вызов
descriptionWithLocale:
где locale -nil
.descriptionWithLocale:
Возвращает строку, представляющую содержимое получатель для данной локали.
- (NSString *) descriptionWithLocale: (id) aLocale
Параметры aLocale
Объект содержащий информацию о локали с для форматирования описания. Использовать
nil
, если вам не нужно описание отформатирован.
Просто позвоните по [theNumber stringValue]
.
Используйте 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