web-dev-qa-db-ja.com

iOSのモジュロ演算子

cの%のように、iOSでmod演算子を検索してきましたが、それを見つけることができませんでした。これで答えを試しました link しかし、同じエラーが発生します。ユーザーの指の動きに基づいて角度が増加または減少し続けるfloat変数「rotationAngle」があります。このようなもの:

if (startPoint.x < pt.x) {
    if (pt.y<936/2) 
        rotationAngle += pt.x - startPoint.x;
    else
        rotationAngle += startPoint.x - pt.x;   
    }
    rotationAngle = (rotationAngle % 360);
}

私はrotationAngleが+/- 360の制限を超えないことを確認する必要があります。どんな体も助けてくれます。ありがとう

18
nuteron

Math.hのfmoddoubleの場合)およびfmodffloatの場合)を使用できます。

#import <math.h>

rotationAngle = fmodf(rotationAngle, 360.0f);
42
Hailei

定義については、浮選点モジュロを実行するfmod関数を使用してください: http://www.cplusplus.com/reference/clibrary/cmath/fmod/ 。それがどのように機能するかの例(戻り値付き):

fmodf(100, 360); // 100
fmodf(300, 360); // 300
fmodf(500, 360); // 140
fmodf(1600, 360); // 160
fmodf(-100, 360); // -100
fmodf(-300, 360); // -300
fmodf(-500, 360); // -140

fmodfは引数として「float」を取り、fmodは「double」を取り、fmodlは「doublelong」を取りますが、これらはすべて同じことを行います。

12
kuba

最初にintにキャストしました

rotationAngle = (((int)rotationAngle) % 360);

より正確に使用したい場合

float t = rotationAngle-((int)rotationAngle);
rotationAngle = (((int)rotationAngle) % 360);
rotationAngle+=t;
1
Jason McTaggart