1

一部のアイテムの入力費用を正しく処理しようとしています。したがって、コンマ区切りの小数を使用するロケールを使用してデバイスで作業する場合 (小数点パッドは、ユーザーが入力するドット '.' の代わりにコンマ ',' を自動的に設定します)、コア データを使用して値を double 変数に格納します。このようにテキスト:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMaximumFractionDigits:2];
NSNumber * gasto = [f numberFromString:(((UITextField*) [cell viewWithTag:11]).text)];
destino.nuevaTrans.gasto = [gasto doubleValue];
//destino.nuevaTrans is the managed object, nothing weird there, just storing the decimal value

しかし、格納されたオブジェクトから値を取り出してテーブル ビューで表示すると、コンマ区切りのロケール設定 (?) が原因で小数点以下が失われます。このようにします:

etiq = (UILabel*) [cell.contentView viewWithTag:12];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
etiq.text = [numberFormatter stringFromNumber:@(trans.gasto)];

//debugging console output:
//remmember, trans.gasto is only a double
NSLog(@"a: %f, b: %@", trans.gasto ,[numberFormatter stringFromNumber:@(trans.gasto)]);

ドット「。」を使用しているシミュレーターの出力。ロケール設定は正常に機能しますが、カンマ「,」設定を使用しているデバイスにデプロイする場合、NSNumberFormatter はそれを通貨スタイルに正しく変換していないようです。

//output on the simulator:
2014-09-07 15:00:47.561 iSpend[3930:60b] a: 2.990000, b: $2.99

//output on the device:
2014-09-07 15:02:40.005 iSpend[1389:60b] a: 2.170000, b: ₡2

だから、私はこれを試してみることができます...しかし、私はここでより良いプログラミングの練習を探しています. すべての提案をいただければ幸いです。ありがとう!

4

2 に答える 2

1

各ロケールは、セントまたはクローナのみを表示するかどうかを決定します。したがって、カンマの後に数字を表示するように強制する場合は、次の行を追加します。

[numberFormatter setMinimumFractionDigits:2];

コンマの後に2桁を取得します。

しかし、あなたが示した例には正しい出力があります。

于 2014-09-07T13:34:51.153 に答える
1

あなたは明確にセパレーターを設定しようとすることができます:[formatter setDecimalSeparator:@"."];

于 2014-09-07T15:37:42.760 に答える