2013-04-20 13 views
14

"12000.54"のようなNSStringを "12.000,54"に変換しようとしました。私はNSNumberFormatterインスタンスを書きました。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。

私はこれをどのように処理できるか知っていますか?

+2

はおそらく、私は問題を発見した期待通り。私はnumberFromStringを最初に作るために別のNSFormatterを使う必要があります。私は私の投稿を閉じるために投票しました – Pierre

+2

それを閉じず、自分で答えを入力してチェックし、他の人は将来同じ問題を抱えます。 –

+0

@DavidHと同時に問題は有効であり、コードと必要な情報で完全です。私は実際にそれをupvotingている:-) – LSerni

答えて

20

そこで質問は有効です。私はそれを自分で答えるよ:)

を私はsqliteの(例えば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 

問題を解決しました。

+1

'NSString'の' doubleValue'プロパティを使うこともできます。 – Kevin

37

iPhoneのロケール設定に基づいて適切な区切り文字を使用するようにセパレータをハードコードしないことをお勧めします。 SWIFT 3

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 

を使用して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 

を使用して

と私はので、VAR-名 "numberFromString" を使用することはありません。これまでに最も簡単な方法はあります方法はNSNumberFormatterです。 幸運を祈る!

+0

スーパー回答、ありがとう – Mutawe

3
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
numberFormatter.usesGroupingSeparator = YES; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setMinimumFractionDigits:2]; 
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.00];` 

これは、小数点を扱う場合に問題を切り上げます。

6

私は最近見つかった最も簡単な解決策は次のとおりです。

NSString *localizedString = [NSString localizedStringWithFormat:@"%@", @1234567]; 

はまた、int型で動作します:

Xcodeの6遊び場で検証
NSString *localizedString = [NSString localizedStringWithFormat:@"%d", 1234567]; 

。しかし、ドキュメントは、この機能は常に存在していると言います。

通貨の使用のために
+0

簡単回答作品です! –

0

...

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" 

1は

関連する問題