将NSString转换为NSNumber

时间:2013-01-29 19:40:26

标签: iphone ios objective-c nsstring nsnumber

  

可能重复:
  How to convert an NSString into an NSNumber

如何将NSString(例如@“5”)转换为NSNumber(5)。我已经看过是否有任何问题在Stack Overflow上回答这个问题,但似乎很多人一直在要求一个数字来进行字符串转换 - 而不是相反。

3 个答案:

答案 0 :(得分:3)

由于以下几个原因,没有内置功能:

1)它很模糊。要说2013(年份),我可能会说“二千一十三”,“二千一十三”,“二十三”,“二十三十三”,等等。这甚至没有考虑到辩证的差异。

2)它不容易本地化。大声说话的规则在不同语言之间变化很大(因此一套规则不能真正用于每个语言环境),Apple只提供可在全球使用的API。这个星球上的大多数人都不会说英语。

3)假设用户可以拼写正确。 “四十”不是一个数字。 “四十”是。

如果你告诉我们你为什么要这样做(即目标是什么),也许我们可以建议一个更好的方法?

答案 1 :(得分:3)

这大致有效,至少应该让你开始:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterSpellOutStyle;

NSArray *testStrings = @[@"Five",@"twenty-four",@"Nineteen",@"One hundred forty-two"];

for (NSString *test in testStrings) {

    NSNumber *result = [formatter numberFromString:[test lowercaseString]];

    NSLog (@"String %@ -> %@ as number",test,result);

}

要考虑的一些事情:

  • 您需要将语言环境正确设置为某个固定语言环境(如果这些字符串全部来自服务器或某种常量语言)或让它浮动到用户的语言环境(如果用户是进入的语言环境)字符串)
  • 正如其他人所指出的那样,这个解析器可能不够复杂,无法满足您的需求。例如,最后一个字符串“三十三”实际上返回错误的结果。其他人工作正常。正如@JonathanGrynspan建议的那样,如果你在这里告诉我们更多关于你的目标的话,有人可以提出更好的建议。

我希望有所帮助。

答案 2 :(得分:-1)

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:@"42"];

希望这会有所帮助..