4

textfield.text 入力を格納する配列があります。次に、別の場所でテキストをフロートとして取得します。これにより、テキストフィールドから「正確な数」が得られるようです。

例A

   navtestAppDelegate *appDelegate = 
   (navtestAppDelegate *)[[UIApplication 
    sharedApplication] delegate];

NSMutableArray *storedData = 
 appDelegate.myData;

[storedData replaceObjectAtIndex: myIndex withObject: mytextfield.text];

float number = [[storedData objectAtIndex:myIndex] floatValue];

の場合mytextfield.text input is 22.8float number戻ります22.8

でも、

例 B

[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];

float number  = [[storedData objectAtIndex:myIndex] floatValue];

float number戻り値22.7999999

例 A で正確な数値が得られる理由がわかりません

4

2 に答える 2

0

値 22.8 は、2 進浮動小数点では正確に表すことができません。表示されているのは、表示形式に基づく表現です。表示方法が異なれば、表示形式も異なる場合があります。異なる桁数と丸めを表示するということは、丸め後に表示される桁数は 22.8 と 22.7999999 の両方が正しいことを意味します。22.8000000 ではなく 22.7999999 が表示されていることに注意してください。

これは基数に依存します。つまり、ある基数で正確にできるものは、別の基数では正確にできない場合があります。この場合、10 進数の基数の 22.8 は、2 進数の基数では正確ではありません。

これが NSDecimal が存在する理由であり、浮動小数点が通貨値に使用されない理由です。

これは、基数 10 進数で pi の値を表示するのといくらか同じです。桁数は無限であるため、ディスプレイごとに表示する桁数を決定しました。興味深いことに、pi は pi 基数で正確に (しかし便利に) 表すことができます。:-)

floatとの場合、double表現できる桁数には限りがあります。

于 2013-11-07T01:00:02.930 に答える