2011-10-23 3 views
4

だから私はフロートの整数部分を取得:Objective-C

フロートx = x + 0.25;

このフロートはクリックが

のNSLog(@ "%fを"、X)を起こるたびに呼び出されます。

は私がのNSLogはこれだけ

x  return   

1.25   1 
1.50   1 
3.25   3 
4.75   4 

などの任意のアイデアので、整数部分を返すようにしたいですか?

答えて

12

浮動小数点数がintの範囲外の場合は、intに変換されません。

"%.0f"で印刷すると切り捨てられません。したがって、4.75は、5として印刷されます。

あなたのコンパイラ(より正確に、あなたのランタイムライブラリ)がそれらをサポートしている場合、trunc()truncf()、および<math.h>で宣言さtruncl()機能は、正確に何をしたいか:

printf("%.0f\n", trunc(x)); 

は、これらの関数はC99で新たに追加されましたコンパイラがそれらをサポートしていない可能性があります。 C90はfloor()機能を提供します。負の数のための特別なケースのコードを書くなら、それを使うことができます。

4

あなたがint(キャスト)としてXを扱うことができます。

NSLog("%d", (int)x); 

注:これはラウンドしません、それが唯一の整数部を返し、値が切り捨てられます。

編集:これは可能なすべての浮動小数点値を切り捨てる安全な方法ではないことに注意してください。小さな値の場合でもうまく動作します(intに該当するもの)。

+1

xが 'INT_MIN' ..' INT_MAX'の範囲外であれば失敗します。 –

+0

希望する場合は、必要に応じて長いlongまたはunsignedを使用して、使用可能な範囲を拡大することができます。 – jv42

+0

私が聞いたすべての実装で、最大の整数型は、最も狭い浮動小数点型の全範囲を保持するには狭すぎます。そして 'trunc()'があります。 –

関連する問題