2011-01-26 14 views
2

私はObj-Cの騒ぎですが、今日はNSNumberとintValueを使って私が本当に理解できないことがあります。NSNumberとintValue:奇妙な振る舞い

2.030000 203.000000 203 202 

誰かが最終intValueは202で203を回す理由を理解するために私を助けることができるしてください:出力を印刷し

double quota = 203/100.0;  
    NSLog(@"%f %f %@ %d", 
    quota, 
    quota*100.0, 
    [NSNumber numberWithDouble:(quota*100.0)], 
    [ [NSNumber numberWithDouble:(quota*100.0)] intValue] 
); 

私はこのコード例がありますか? 私は本当に明白で重要な何かを見逃しているように感じます。

TIA

答えて

4

doubleとして保存されている間、私はあなたのコードと= 2.0299999999999998 203/100.0の結果を走りました。 NSNumberのように見えるだけでなく、%fは印刷時に2.03に丸めますが、202.99999999999998のint値を取得すると、.99999999999998が破棄されます。うまくいけば、誰か(または私自身の編集者)が、二重値を出力するときにこの丸め動作がなぜ発生しているのかを追加することができます。

+0

答えてくれてありがとうございます。ジョー、これは私には本当に奇妙に思えます。なぜなら、私はintValueが最も近いint値を返すことを期待しているからです。リンゴの参照はすべて、戻り値が「受信者の値をintとして変換し、必要に応じて変換する」ことを示しています。私は誰かがこのコンセプトを明確にできることを願っています – Billo

+4

よく一般的には、直接のint値の変換は、の後のすべての数字を削除します。丸められた値が必要な場合は、明示的にMath丸め関数を呼び出す必要があります。私はなぜ値を印刷すると、それが203に丸められるのか、もっと興味があります – Joe