如何获取NSDecimal或NSDecimalNumber的无格式字符串表示形式?

时间:2009-11-29 14:25:01

标签: iphone cocoa cocoa-touch string

我有一个NSDecimal,需要它作为技术字符串,即没有任何格式化。浮点应该是“。”如果有的话,减号应该只是一个“ - ”,如果有的话。除此之外,不应该像分组或中文数字一样进行格式化。

我在SDK中寻找了2个小时,但似乎没有什么比这更简单的了。有解决方案吗?

4 个答案:

答案 0 :(得分:7)

对于NSDecimal,您可以将NSDecimalString与指定的区域设置一起使用:

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

美国语言环境使用小数点分隔符的句点,没有千位分隔符,所以我相信这会让你得到你想要的那种格式。

正如其他人所指出的,对于NSDecimalNumber,您可以将-descriptionWithLocale:方法与上面指定的美国语言环境一起使用。这不会让你失去任何精确度。

答案 1 :(得分:4)

NSDecimalNumber

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

NSDecimal

NSLog(@"%@", NSDecimalString(&theDecimal, nil));

答案 2 :(得分:3)

NSDecimalNumberNSNumber的子类,其-stringValue方法。

  

stringValue的

     

返回接收者的   值作为人类可读的字符串。

- (NSString *)stringValue
     

返回值

     

接收者的价值为   人类可读的字符串,由   调用descriptionWithLocale:在哪里   区域设置为nil

     

descriptionWithLocale:

     

返回表示内容的字符串   给定语言环境的接收者。

- (NSString *)descriptionWithLocale:(id)aLocale
     

参数aLocale

     

一个对象   包含区域设置信息   哪种格式化描述。使用   nil如果您不想要说明   格式化。

只需致电[theNumber stringValue]

答案 3 :(得分:0)

使用NSDecimalNumber类中的decimalNumberWithString:

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