1

同様の質問が寄せられていますが、提供されたソリューションは最新の iOS SDK では機能しないか、この特定のケースには正確に適用できないことがわかりました。

NSNotification を使用してメソッドを呼び出します。これは、ボタン入力からの数字を使用して入力されたときに、UILabel でグループ化記号を使用して数値をフォーマットします。小数点の後にゼロが入力されていない限り、整数と小数でもうまく機能します。例えば ​​2000 と入力すると、2,000 と表示されますが、問題なく入力されています。23.345 を入力すると、それも問題なく表示されます。これらの数値に対して行われた計算はすべて正しく行われます。しかし、0.0001 や 0.2340007 を入力することはできません。小数点の後にゼロを取り、追加することはありません。

元のコードのアイデアは、stackoverflow の別の投稿から入手しました。

NSString *currentText = [display_ text];
currentText = [currentText stringByReplacingOccurrencesOfString:@","
               withString:@""];
currentText = [currentText stringByReplacingOccurrencesOfString:@"." 
               withString:@"."];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@","];
[formatter setDecimalSeparator:@"."];
[formatter setMaximumFractionDigits:10];

NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:currentText];

NSString *finalText = [formatter stringFromNumber:number];

NSString *lastChar = [currentText substringFromIndex:[currentText length] - 1]; 

if ([lastChar isEqualToString:@"."]) 
{
 finalText = [finalText stringByAppendingString:@"."];
}

[display_ setText: finalText];
[formatter release];

フォーマッタのパラメータを使用して(私が試した)微調整をしても、小数点の後にゼロを入力することはできません。

4

1 に答える 1

4

なぜ「。」を置き換えるのですか?と "。"?番号がインスタンス化された後、デバッガーに何が表示されますか?

私はNSDecimalNumberを使ったことがありませんが、しばらく前にすでにdoubleで苦労していました。問題を分解することをお勧めします。numberハードコードされた値でインスタンス化し、フォーマットしてログファイルに書き込みます。これが機能しない場合は、以下のコードを試してください。2倍の値を使用すると、アプリで正常に機能します。私はドイツ語のロケール設定を使用していますが、それは重要ではありません。

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
[formatter setAllowsFloats:TRUE];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumSignificantDigits:20];
[formatter setMaximumSignificantDigits:20];
[formatter setMinimumFractionDigits:0];
[formatter setMaximumFractionDigits:5];
NSLocale* locale = [NSLocale currentLocale];
[formatter setLocale:locale];
NSNumber* number = [NSNumber numberWithDouble:1000.0123f];
myTextField.text = [formatter stringFromNumber:number];

コードがすでに機能している場合は、

  • ゼロではなくOがないことを確認してください
  • この「。」を削除します 上記の交換
  • ロケールを設定すると、いくつかの問題が明示的に解決されることがわかりました(詳細を覚えるのはかなり前のことですが、試してみるとよいでしょう)
  • NSDecimalNumberをNSNumberに置き換え、double値でフィードします
  • XIBファイルをチェックし、テキストフィールドが他のフォーマットを実行しないことを確認します
于 2011-09-25T14:11:06.933 に答える