-1

私はこのコードを持っています:

.h ファイル内:

@interface ViewController : UIViewController
{
    float costBonus9;
}

.m ファイル内:

costBonus9 = 123456789;
NSNumber *numbercost9 = [NSNumber numberWithFloat:costBonus9];
NSString *formatcost9 = [formattercost stringFromNumber:numbercost9];
Label9.text = formatcost9;

ただし、Label9 では「123456792」と表示されます。

どうしたの?

4

2 に答える 2

2

問題は、123456789 を表すために単精度浮動小数点数、つまり a を使用していることですfloat。float は、その値を仮数 (「仮数」と呼ばれることもあります) と指数の組み合わせとして格納しますが、科学表記法とは異なります。

s * 2^e

仮数の大きさによって、指定された値をどれだけ正確に表現できるかが決まります。単精度浮動小数点数には 24 ビットの仮数部があるため、24 の有効ビットを取得します。残念ながら、123456789 を 24 ビットに収めることはできないため、その値の最適な概算値を得ることができます。これは、123456792 です。

正確な値が必要な場合は、値を正確に格納できる型を使用してください。を使用することもできますがdouble、常に整数を格納する場合は、おそらくlong int.

于 2013-09-01T03:38:36.830 に答える
0

デバッグとブレークポイントを使用して、formatcost9 が実際にあなたが考えているものを持っていることを確認します。

xcode にブレークポイントを追加するには、ナビゲーター (クラスのリストなど) をキャンバス (コードが表示される場所) から分離する灰色のバーをクリックします。確認したいコード行の横にある をクリックしてください。をクリックしてnumbercost9、プログラムを実行します。ブレークポイントに到達すると一時停止します。デバッグ メニューが表示されます。太いバーに向かって下向きの矢印をクリックします。これにより、コードが 1 行ずつ移動します。

デバッグ メニューには 2 つのボックスがあり、1 つは右側 (これはコンソールです)、もう 1 つは左側にあり、変数の値が表示されます。これを使って の値を求めますformatcost9

于 2013-09-01T03:35:05.210 に答える