将NSString转换为NSNumber

29 浏览
0 Comments

将NSString转换为NSNumber

这个问题已经在这里有答案了

可能的重复:

如何将NSString转换为NSNumber

如何将NSString(例如@\"Five\")转换为NSNumber(5)。我已经在Stack Overflow上找过是否有任何问题回答了这个问题,但似乎许多人一直在要求将数字转换为字符串,而不是另一种方式。

admin 更改状态以发布 2023年5月23日
0
0 Comments

这方面没有内置的功能,原因有几点:

1) 它模糊不清。要说 2013 (年),我可能会说“ two thousand thirteen”,“two thousand and thirteen”,“twenty thirteen”,“two kay thirteen” 等等。这甚至没有考虑方言差异。

2) 它不容易本地化。朗读数字的规则在语言间变化很大(因此不能真正用于每个地区),而苹果仅提供可用于全球的API。这个星球上大多数人不说英语。

3) 它假设用户能正确拼写。 "Fourty" 不是数字,"Forty" 才是。

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

0
0 Comments

这个大致可以起到作用,至少可以让你开始:

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);
}

一些需要考虑的事情:

  • 你需要将语言环境设置正确,可以是某些固定的语言环境(如果这些字符串都来自服务端或某个固定语言的常量),或者让它浮动到用户的语言环境(如果用户是输入这些字符串的人)
  • 正如其他人指出的,这个解析器可能不够复杂,无法满足你的需求。例如,最后一个字符串"thirty three"实际上返回了错误的结果。其他的工作得很正确。如@JonathanGrynspan所建议的,如果你在这里告诉我们更多关于你的目标,有人可能会建议更好的方法。

希望能有所帮助。

0