「12000.54」のようなNSStringを「12.000,54」に変換してみました。 NSNumberFormatterインスタンスを作成しました。
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@"."];
[formatter setDecimalSeparator:@","];
しかし、私がこれをNSLogするとき:
NSLog(@"%@",[formatter stringFromNumber:[formatter numberFromString:value]]);
Null値を出力します。カンマをポイントに変更すると、正しく機能します。セパレーターフィールドに必要なもの(コンマ、ポイント、スラッシュなど)を配置できるようにしたいだけで、さまざまな出力(12/000,54 12.000.54 12,000,54など)があります。
私がこれをどのように処理できるか知っていますか?
だから質問は有効です:私は自分で答えています:)
Sqliteから読み取られた10進数値(例:12000または12000.54)を直接NSStringに変換しました。コードのある時点で異なるセパレータを使用する必要があります。
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@""];
[formatter setDecimalSeparator:@"."];
// Decimal values read from any db are always written with no grouping separator and a comma for decimal.
NSNumber *numberFromString = [formatter numberFromString:@"12000.54"]];
[formatter setGroupingSeparator:@" "]; // Whatever you want here
[formatter setDecimalSeparator:@","]; // Whatever you want here
NSString *finalValue = [formatter stringFromNumber:numberFromString];
NSLog(@"%@",finalValue); // Print 12 000,54
問題が解決しました。
IPhoneのロケール設定に基づいて正しいセパレータの動作を保証するために、セパレータをハードコーディングしないことをお勧めします。これを行う最も簡単な方法は次のとおりです。
objective-cを使用
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
numberFormatter.locale = [NSLocale currentLocale];// this ensures the right separator behavior
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
numberFormatter.usesGroupingSeparator = YES;
// example for writing the number object into a label
cell.finalValueLabel.text = [NSString StringWithFormat:@"%@", [numberFormatter stringForObjectValue:numberFromString]]; // your var name is not well chosen
使用Swift
let formatter = NumberFormatter()
formatter.locale = NSLocale.current // this ensures the right separator behavior
formatter.numberStyle = NumberFormatter.Style.decimal
formatter.usesGroupingSeparator = true
// example for writing the number object into a label
// your variable "numberFromString" needs to be a NSNumber object
finalValueLabel.text = formatter.string(from: numberFromString)! // your var name is not well chosen
var-name "numberFromString"はNSNumberFormatter
メソッドなので、使用しません。幸運を!
私が最近見つけた最も簡単な解決策は次のとおりです。
NSString *localizedString = [NSString localizedStringWithFormat:@"%@", @1234567];
Intsでも機能します。
NSString *localizedString = [NSString localizedStringWithFormat:@"%d", 1234567];
Xcode 6プレイグラウンドで検証済み。しかし、ドキュメントはこの機能が常に存在していたと言います。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
numberFormatter.usesGroupingSeparator = YES;
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:2];
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.00];`
これにより、小数点を処理する場合の切り上げの問題が修正されます。
通貨用...
let numberFormatter = NumberFormatter()
// Produces symbol (i.e. "$ " for en_US_POSIX) and decimal formatting
numberFormatter.numberStyle = .currency
// Produces commas; i.e. "1,234"
numberFormatter.usesGroupingSeparator = true
numberFormatter.groupingSize = 3
使用例:
let value: Double = 12345.6789
numberFormatter.string(from: value as NSNumber)
利回り...
"$ 12,345.68"
予想通り