0

NSString で浮動小数点数の精度を指定しようとしていますが、このエラーが発生し続けます。

形式は「double」型を指定していますが、引数の型は「NSString *」です

これが私のコードです:

NSString *tmplabel = [tmp description];
temp.text = [NSString  stringWithFormat: @"%.fº", tmplabel];

私は何を間違っていますか?

4

4 に答える 4

3

あなたの tmplabel はNSStringですdouble

tmplabel が単純な double として解析できる数値を保持していることが確実な場合は、そのまま使用できますdoubleValue。そうしないと、エラー処理などでより複雑な変換を行う必要がある場合があります。

これを行うための現実的な簡単な方法を次に示します。

temp.text = [NSString  stringWithFormat: @"%.fº", [tmplabel doubleValue]];

メソッド (およびそのdoubleValue近親者integerValueなど)は文字列の内容を解釈し、文字列の先頭が数値として読み取れる場合は、それを変換して適切なプリミティブ型として返します。あなたの場合、プリミティブ型はdouble.

オブジェクト (何でも NS*) からプリミティブ型に型をキャストすることはできませんが、常に何らかの解釈またはプログラムによる変換を行う必要があります。

最後に、doubleValueユーザー入力を直接使用することは、ある時点で再度アクセスしたくなるショートカットであることにご注意ください。そのため、数値フォーマッターまたはNSScanner後で使用して再実装することを心に留めておいてください。理由を理解するには、数値以外のデータを入力してみて、結果に満足できるかどうかを確認してください。

最後に、実際に精度 (つまり、小数点以下の桁数) を要求どおりに設定するには、以下の王子の回答、またはDharaParekh のを参照してください。

于 2013-05-14T11:11:36.390 に答える
2

これを試して

NSString *tmplabel = [tmp description];
temp.text = [NSString  stringWithFormat: @"%.f", [tmplabel doubleValue]];
于 2013-05-14T11:15:23.597 に答える
2

これを試して:

NSString *tmplabel = [tmp description];
float tmp = [tmplabel floatValue];
temp.text = [NSString  stringWithFormat: @"%.1f", tmp];
于 2013-05-14T11:17:06.703 に答える