如何将带有数字的字符串转换为具有逗号而非小数点的NSDecimalNumber?

时间:2010-11-01 01:17:26

标签: iphone objective-c nsnumber nsnumberformatter

我有一个界面给我这样的数字0000000012345,78

所以我想出了如何用它们制作一个数字。但我需要用这个数字计算,我实际需要的是一个十进制数。

NSNumberFormatter *fmtn = [[NSNumberFormatter alloc] init];
[fmtn setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtn setNumberStyle:NSNumberFormatterDecimalStyle];
[fmtn setDecimalSeparator:@","];
NSNumber *test = [fmtn numberFromString:@"0000000012345,78"];

如何将NSNumber设为NSDecimalNumber?

编辑:这是我最终得到的代码:

NSDictionary *localeDict = [NSDictionary dictionaryWithObject:@"," forKey:@"NSDecimalSeparator"];
NSDecimalNumber *test = [[NSDecimalNumber alloc] initWithString:@"00000000012345,78" locale:localeDict];

如何将语言环境字典放在一起不能被描述为“记录良好”,并且我花了一些谷歌搜索来找到一个例子。

这个也有效:

NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"de"];
NSDecimalNumber *testd = [NSDecimalNumber decimalNumberWithString:@"00000000012345,78" locale:deLoc];

3 个答案:

答案 0 :(得分:39)

要将NSNumber转换为NSDecimalNumber,使用此代码完全避免字符表示会更有意义吗?

NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]]; 

答案 1 :(得分:1)

[NSDecimalNumber decimalNumberWithString:@"0000000012345,78"];

但请谨慎使用语言环境;如果您在区域格式未设置为法语的iPhone上运行该代码,则可能无法返回您期望的内容。所以你可能想要使用:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString locale:(NSDictionary *)locale

代替。

答案 2 :(得分:1)

如果您查看NSDecimal Class Reference,您会看到可以从NSDecimalNumber(包含和不包含区域设置),实际数字等创建新的NSString

如果您想将NSNumber转换为NSDecimalNumber,可以执行以下操作:

NSDictionary *locale = ...;
NSNumber *number = ...;
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:[number descriptionWithLocale:locale] locale:locale];

当然,您必须正确创建区域设置等等,但这是一项由您完成的练习(查看NSNumber Class ReferenceNSLocale Class ReferenceLocales Programming Guide)。