14

我有一个界面给我这样的数字 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];
4

3 回答 3

39

要将 an 转换NSNumberNSDecimalNumber,用这段代码完全避免字符表示不是更有意义吗?

NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]]; 
于 2012-05-10T19:49:31.627 回答
1
[NSDecimalNumber decimalNumberWithString:@"0000000012345,78"];

但是,请注意语言环境;如果您在区域格式未设置为法语的 iPhone 上运行该代码,它可能不会返回您期望的结果。所以你可能想使用:

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

反而。

于 2010-11-01T01:35:23.933 回答
1

如果您查看NSDecimal Class Reference,您会看到您可以NSDecimalNumberNSStrings(有和没有语言环境)、实际数字等创建新的 s。

如果您想将 an 转换NSNumberNSDecimalNumber,您可以执行以下操作:

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

当然,您必须正确地创建语言环境,等等,但这是一个留给您的练习(查看NSNumber 类参考NSLocale 类参考语言环境编程指南可能会很方便)。

于 2010-11-01T01:38:42.523 回答