2

可能重复:
如何将 NSString 转换为 NSNumber

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

4

3 回答 3

3

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

1)它是模糊的。要说2013(年),我可能会说“两千一十三”、“两千一十三”、“二十三”、“二开十三”等。这还没有考虑到辩证的差异。

2)它不容易本地化。大声朗读数字的规则因语言而异(因此一组规则不能真正用于每个区域),Apple 仅提供可在全球范围内使用的 API。这个星球上的大多数人不会说英语。

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

如果您告诉我们您为什么要这样做(即目标是什么),也许我们可以提出更好的方法?

于 2013-01-29T19:47:09.947 回答
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);

}

需要考虑的一些事情:

  • 您需要将语言环境正确设置为某个固定语言环境(如果这些字符串都来自服务器或某种恒定语言),或者让它浮动到用户的语言环境(如果用户是输入字符串的人)
  • As others have pointed out, this parser may not be sophisticated enough for your needs. For example, the last string "thirty three" actually returns the wrong result. The others work correctly. As @JonathanGrynspan suggested, if you tell us more about your goal here, someone can maybe suggest something better.

I hope that helps.

于 2013-01-29T20:06:40.737 回答
-1
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:@"42"];

Hope this helps..

于 2013-01-30T03:03:29.477 回答