3

次の計算を行う必要があります。

float value = MY_VALUE;

float percentage = (value - MIN)/(MAX - MIN);
if (percentage < 0)
   percentage = 0;
if (percentage > 1)
   percentage = 1

これを達成するのに役立つObjective-CまたはCに存在するメソッドがあるかどうか、たとえば、「値」フロートをMINとMAXの境界の間に丸めるメソッドがあるかどうか疑問に思っていました。

4

4 に答える 4

3

標準 C ライブラリにはそのようなメソッドはありません (Objective C については知りません)。

于 2012-05-23T22:00:10.603 に答える
1

Objective-C 構文でパーセンテージを計算する場合は、これが適しています。

(Dogbert は 6 行目で (反対に) 間違えたと思います)。これが私がやったことであり、それは望みどおりに機能します..

- (CGFloat)calculateProgressForValue:(CGFloat)value start:(CGFloat)start end:(CGFloat)end
{    
    CGFloat diff = (value - start);
    CGFloat scope = (end - start);
    CGFloat progress;

    if(diff != 0.0) {
        progress = diff / scope;
    } else {
        progress = 0.0f;
    }

    return progress;
}

そして、次のように 0.0 または 1.0 を超えないようにこれをいつでも制限できます。

- (CGFloat)progressConstrained {

    // example values
    CGFloat start = 80;
    CGFloat end = 160;
    CGFloat a = 100;

    // the constrain
    return MAX(0.0, MIN(1.0, [self calculateProgressForValue:a start:start end:end]))
}
于 2012-07-17T18:16:54.027 に答える
1

いいえ。

別の注意として、ゼロ除算の可能性を防ぐために、おそらくコードを更新する必要があります。

float den = (value - MIN);
float num = (MAX - MIN);
float percentage;

if(den) {
  percentage = num / den;
  if (percentage < 0.0f ) {
    percentage = 0.0f;
  } else if (percentage > 1.0f) {
    percentage = 1.0f;
  } else {
    printf("Percentage: %3.2f",percentage);
  }
} else {
  percentage = 0.0f;
  printf("DIVIDE BY ZERO ERROR!");
}

また、注意してください。オラクルは、非常によく似たコードをめぐって Google を訴えています。公に投稿することを再検討することをお勧めします。

http://developers.slashdot.org/story/12/05/16/1612228/judge-to-oracle-a-high-schooler-could-write-rangecheck

于 2012-05-23T22:35:42.207 に答える
1

ある値が他の値より高くも低くもないことを確認したいだけなら、MAX(a, b) と MIN(a, b)... を使用する必要があります。

float maxValue = 1.0;
float minValue = 0.0;
float myValue = 2.8;
float myValueConstrained = MAX(minValue, MIN(maxValue, myValue)); // 1.0

MIN(a,b) は a と b の最小値を取ります

MAX(a,b) は a と b の最大値を取ります


私は通常、次のようにします:

float myValueConstrained = MAX(0.0, MIN(1.0, myValue));
于 2012-07-17T18:20:46.370 に答える