2012-02-10 18 views
2

Objective Cで作業中で、2次元配列の適切なインデックスを推定しようとしています。整数を浮動小数点で除算すると不正確な結果が発生する

これを行うには、タグが1つの番号で2つのインデックスをマージするように設定されているボタンがいくつかあります。

float tag = (float)[sender tag]; 

    float x = [[NSString stringWithFormat:@"%.2f", tag/10.f] floatValue]; 
    //float x = (float)tag/10.f; 

    int y = floor (x); 

    int z = (x - y) * 10; 

理論:例では、タグ上のアレイ結果の1,1の位置=その後11

インデックスの二つの成分の結合を解除するために、私は、次のコードを使用してい正常に動作しますが、私はこれらの結果を得るときに驚いています:

タグ= 23 x = 2.29999995(2.3/23 = 2.2999995)の予想結果の代わりに!

私は、ダブルといくつかの操作を成功させずに試みました。

誰かが間違っていることを知っていますか?

ありがとうございました。

+0

これは "Objective-C"とは関係がありません。単純な "C"であり、浮動小数点演算が動作する方法です。 – zaph

答えて

4

整数演算を使用します。浮動小数点は完全な精度を持つすべての数値、特に非整数値を表すわけではありません。 [sender tag] 23で

例:

int senderTag = 23; 
int tagA = senderTag/10; 
int tagB = senderTag % 10; 
NSLog(@"senderTag: %d, tagA: %d, tagB: %d", senderTag, tagA, tagB); 

のNSLog出力:

senderTag:23、TAGA:2、TAGB:特に3

+0

Niiiceしかし、私はundestandどのように:(と(( – NemeSys

+0

整数除算は10で割るので、最下位桁が削除されます:(23/10)== 2) '%'はモジュラス演算子です基本的には、0と係数値-1との間の数値、この場合は0〜9を残す長い除算の残りの部分と同じです。(23%10)== 3。 – zaph

0

、画分1/3、1/5など浮動小数点演算によって正しく表現することはできません。

関連する問題