14

私はこの0000000012345,78のような数字を私に与えるインターフェースを持っています

だから私はそれらから数を作る方法を考え出しました。しかし、その数値で計算する必要があり、実際に必要なのは 10 進数です。

NSNumberFormatter *fmtn = [[NSNumberFormatter alloc] init];
[fmtn setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtn setNumberStyle:NSNumberFormatterDecimalStyle];
[fmtn setDecimalSeparator:@","];
NSNumber *test = [fmtn numberFromString:@"0000000012345,78"];

NSNumber を NSDecimalNumber にするにはどうすればよいですか?

編集:これは私が最終的に得たコードです:

NSDictionary *localeDict = [NSDictionary dictionaryWithObject:@"," forKey:@"NSDecimalSeparator"];
NSDecimalNumber *test = [[NSDecimalNumber alloc] initWithString:@"00000000012345,78" locale:localeDict];

ロケール辞書をまとめる方法は「十分に文書化されている」とは言えず、例を見つけるのにグーグルで検索する必要がありました。

これも機能しました:

NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"de"];
NSDecimalNumber *testd = [NSDecimalNumber decimalNumberWithString:@"00000000012345,78" locale:deLoc];
4

3 に答える 3

39

を に変換するNSNumberNSDecimalNumberは、このコードで文字表現を完全に避ける方が理にかなっているでしょうか?

NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]]; 
于 2012-05-10T19:49:31.627 に答える
1
[NSDecimalNumber decimalNumberWithString:@"0000000012345,78"];

ただし、ロケールには注意してください。地域形式がフランス語に設定されていない iPhone でそのコードを実行すると、期待どおりの結果が返されない可能性があります。したがって、次を使用することをお勧めします。

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString locale:(NSDictionary *)locale

代わりは。

于 2010-11-01T01:35:23.933 に答える
1

NSDecimal Class Referenceを確認すると、 s (ロケールの有無にかかわらず)、実際の数値などNSDecimalNumberから新しい s を作成できることがわかります。NSString

NSNumberを に変換したい場合はNSDecimalNumber、次のようにすることができます。

NSDictionary *locale = ...;
NSNumber *number = ...;
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:[number descriptionWithLocale:locale] locale:locale];

もちろん、ロケールなどを正しく作成する必要がありますが、それはあなた次第です ( NSNumber Class ReferenceNSLocale Class Reference、およびLocales Programming Guideを確認すると便利な場合があります)。

于 2010-11-01T01:38:42.523 に答える