NSNumberFormatterの負の形式を(xxx.xx)から-xxx.xxに変更します
-
06-07-2019 - |
質問
NSNumberformatterを、括弧で囲まれた負の数値の表示から、マイナス記号の前(またはローカライズされた標準)に変更します。
setNegativeFormatでこれを行うことができると仮定します:
しかし、Appleの非常に徹底的なドキュメントを読んで、頭をかきむしられています:
setNegativeFormat:
受信者が負の値を表示するために使用する形式を設定します。
- (void)setNegativeFormat:(NSString *)aFormat
パラメータ aFormat 負の値の形式を指定する文字列。
可用性 iPhone OS 2.0以降で使用可能。
関連項目 – negativeFormat
宣言済み NSNumberFormatter.h
aFormatのオプションは何ですか?!? C'mon Doc Writers、ここのリンクはあなたを殺しますか?
編集:ここでの価値があるのは宣言です:
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
ローカライズされた通貨記号を保持することが重要です&小数点以下は何でもかまいません。したがって、通貨が欠落しているため[currencyFormatter setNegativeFormat:@"-#、## 0.00"]はおそらく機能せず、すべての通貨で小数点以下2桁を想定することはできません。
解決
"フォーマット文字列"を見ると、 のセクションCocoaのデータフォーマットプログラミングガイド:
フォーマット文字列は、 Unicode Technical Standard#35 (この参照はバージョンtr35-6で、Mac OS X v10.4のフォーマッタはバージョン tr35-4 )。
編集:
通貨に基づいてフォーマット文字列を設定する場合、¤
文字を使用できます。例:
[formatter setFormat:@"¤#,##0.00"];
これにより、¤
文字の代わりに現在のローカライズの通貨記号が追加されます。
したがって、同じ概念を負のフォーマット文字列に適用します:
[formatter setFormat:@"-¤#,##0.00"];
これにより、現在のローカライズの¤
の代わりに通貨記号も適用されます。
他のヒント
OK、だから私が働いて得た答えは:
[currencyFormatter setNegativeFormat:@"-¤#,##0.00"];
鍵はこのwhatzitですか?文字"¤"。それが何と呼ばれているのか分かりませんか?誰でも?しかし、これらのフォーマット文字列でローカライズされた通貨を表します...
この場合、フォーマットNSStringを探しています。 フォーマット文字列の詳細についてはこちらをご覧ください。
> 12,345.67
のネガを -12,345.67
として表示する場合、正しいNSString値は @"-#、## 0.00であると思います"
また、上記のリンク先のドキュメントには次の文が記載されています:
次の形式を指定しない場合 負の値、指定された形式 前に正の値が使用されます マイナス記号(-)で。
編集:
10.4以降の更新:必要なデータがあります10.4以降の形式。
この文書から、正しい文字列は次のように思われます: @"-#、## 0。##"
すべての回答は、通貨が小数点以下2桁であり、千の区切り文字としてコンマを使用することを前提としています。明らかに、この標準に準拠していない通貨が多数あります。 http://en.wikipedia.org / wiki / Decimal_mark 、次のテクニックを使用します
NSString * formattedBalance = [currencyFormatter stringFromNumber:balance];
if([formattedBalance rangeOfString:@"("].location != NSNotFound ) {
formattedBalance = [NSString stringWithFormat:@"-%@",[[formattedBalance stringByReplacingOccurrencesOfString:@")" withString:@"" ]stringByReplacingOccurrencesOfString:@"(" withString:@"" ]];
}