0
float abc = 145606035;
NSLog(@"%f", abc);
NSLog(@"%d", abc);


First NSLog = 145606032.000000 //this is wrong, please look at the last digit.
Second NSLog = 536870912 //this is wrong too!

なぜ答えはとても奇妙なのですか?それは意味がありますか?'abc'は整数の最大数を超えていませんが、なぜその数が間違っているのでしょうか。とにかくこれを修正しますか?

4

2 に答える 2

6

その理由は、abcのバイナリ表現を整数として解釈するためです。2進表現の10進数と整数は完全に異なり、正しい出力を得るには、abcをintにキャストする必要があります。(int)abc

浮動小数点数の精度のため、最初の出力はオフになっています。浮動小数点数は、その精度を数値の全体と、符号および末尾の小数に分割する必要があります。これは、特に32ビット浮動小数点を使用すると、浮動小数点数の範囲が制限されることを意味します。ダブルタイプを使用すると、最初の数値に対して正しい出力が得られるはずです。

于 2012-09-27T03:15:43.040 に答える
0

それは常にあなたにこのタイプの答えを与えるでしょう。コードを見てください。最初の行で変数「ABC」にfloat値を割り当てており、最初のNSLOGでfloat値を指定するように求めています(これは正しいです)。2番目のNSLOGで、整数値を指定するように求めています(これは正しくありません)。

それがあなたを助けることを願っています!

于 2012-09-27T03:14:28.647 に答える