に変換したいNSStringがありNSDecimalNumber
ます。文字列はサーバーから受信され、常にのようなロケールを使用してフォーマットされen_US
ます。ユーザーのロケールに関係なく受け入れるを作成したいと思います。数値がユーザーに表示されることはなく、内部計算に使用されます。XXX.YYY
XXX,YYY
NSDecimalNumber
XXX.YYY
通常、次のようなことを行います。
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"1.234"];
ただし、ユーザーがfr_FR
Mac 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と同様にに応答します。のように、任意の小数点記号をフィードできます@","
。
他の誰かがより良いアイデアを持っていない限り、これが質問に対する最良の答えである可能性が高いと思いますか?