7

に変換したいNSStringがありNSDecimalNumberます。文字列はサーバーから受信され、常にのようなロケールを使用してフォーマットされen_USます。ユーザーのロケールに関係なく受け入れるを作成したいと思います。数値がユーザーに表示されることはなく、内部計算に使用されます。XXX.YYYXXX,YYYNSDecimalNumberXXX.YYY

通常、次のようなことを行います。

NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234"];

ただし、ユーザーがfr_FRMac OS Xのロケールを実行している場合、それは機能しなくなります。en_USはそれを1ポイント234として解釈しますが、-はそれを1、2、3、4fr_FRとして解釈しますが、どちらも非常に異なる数です。

明らかな解決策は、を使用すること+decimalNumberWithString:locale:です。locale:しかし、MacOSXのすべての国際バージョンで機能するパラメータの引数として何を渡すかはわかりません。私の推測では次のようにします。

NSLocale        *l = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

これを行うための最良の方法であり、安全ですか?@"en_US"ローカル識別子はMacOSXのすべての国際バージョンで利用できますか、それとも場合によってはNSLocaleを返す可能性がありますnilか?


更新1:これはうまく機能しているようで、より明確です:

NSDictionary    *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

NSLocaleDecimalSeparatorはNSLocaleに対して定義された定数であり、-objectWithKey:NSDictionaryと同様にに応答します。のように、任意の小数点記号をフィードできます@","

他の誰かがより良いアイデアを持っていない限り、これが質問に対する最良の答えである可能性が高いと思いますか?

4

1 に答える 1

7

これはうまく機能しているようで、より明確です。

NSDictionary    *l = [NSDictionary dictionaryWithObject:@"." forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234" locale:l];

NSLocaleDecimalSeparatorはNSLocaleに対して定義された定数であり、-objectWithKey:NSDictionaryと同様にに応答します。のように、任意の小数点記号をフィードできます@","

他の誰かがより良いアイデアを持っていない限り、これが質問に対する最良の答えである可能性が高いと思いますか?

于 2011-10-26T16:29:18.100 に答える