アレイから取得したときに、uitextfield.textが正確なフロート番号を返すのはなぜですか?

StackOverflow https://stackoverflow.com/questions/19825257

質問

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.8, float number 戻り値 22.8

でも、

例b

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

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

float number 戻り値 22.7999999

例で正確な数字を取得する理由がわかりません

役に立ちましたか?

解決

値22.8は、バイナリフローティングポイントで正確に表すことはできません。あなたが見ているのは、ディスプレイ形式に基づいた表現です。異なるディスプレイメソッドは、異なるディスプレイ形式を使用する場合があります。異なる数字数と丸めを表示すると、22.8と22.7999999の両方が、丸め後に表示される数字の数が正しいことを意味します。 22.7999999が表示され、22.8000000ではなく表示されたことに注意してください。次の数字が2であるため、表示された値は丸められています。

これはベースに依存します。つまり、1つの数字で正確にできるものは、異なる数のベースで正確になることができない場合があります。この場合、10進数ベースの22.8は、バイナリ数ベースで正確ではありません。

これが、nsdecimalが存在する理由であり、理由が金銭的価値に使用されない理由です。

これは、ベース10進数でPIの値を表示することと多少相当します。数字の数は無限であるため、表示する桁数を決定したすべてのディスプレイでは、表示されます。興味深いことに、PIはPI番号ベースで正確に(しかし有用に)表現できます。 :-)

の場合 floatdouble 表現できる桁数の有限数があります。

他のヒント

このように試してみてください: -

[storedData replaceObjectAtIndex: myIndex    
 withObject: [NSNumber 
 numberWithFloat:22.8]];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top