2

重複の可能性:
NSStringをNSNumberに変換する方法

NSString(@ "Five"など)をNSNumber(5)に変換するにはどうすればよいですか。Stack Overflowでこれに答える質問があるかどうかを確認しましたが、多くの人が数値から文字列への変換を求めているようです。その逆ではありません。

4

3 に答える 3

3

いくつかの理由から、このための組み込み機能はありません。

1) あいまいです。(年)という2013と、「二千三十三」、「二千一三」、「二十三」、「二十三」などと言うかもしれません。

2) ローカライズが容易ではない。数字を声に出して話すための規則は言語によって大きく異なります (したがって、単一の規則セットをすべてのロケールに実際に使用することはできません)。Apple は、世界中で使用できる API のみを提供しています。この地球上のほとんどの人は英語を話せません。

3) ユーザーが正しく綴ることができることを前提としています。「40」は数字ではありません。「四十」です。

なぜこれをやろうとしているのか(つまり、目標は何か)を教えていただければ、より良いアプローチを提案できるでしょうか?

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

}

考慮すべき点:

  • ロケールを固定ロケールに正しく設定するか (これらの文字列がすべてサーバーまたは 1 つの定数言語から来ている場合)、ユーザーのロケールに合わせて浮動させます (ユーザーが文字列を入力している場合)。
  • 他の人が指摘したように、このパーサーはあなたのニーズに対して十分に洗練されていないかもしれません. たとえば、最後の文字列 "thirty three" は実際には間違った結果を返します。他は正常に動作します。@JonathanGrynspan が提案したように、ここで目標について詳しく教えていただければ、誰かがより良い提案をしてくれるかもしれません。

それが役立つことを願っています。

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

お役に立てれば..

于 2013-01-30T03:03:29.477 に答える