我有以下计算:
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范围之间的方法。
答案 0 :(得分:3)
标准C库中没有这样的方法(我不了解Objective C)。
答案 1 :(得分: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!");
}
另外,小心。甲骨文正在起诉谷歌一个非常相似的代码。您可能想重新考虑公开发布它:
答案 2 :(得分: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]))
}
答案 3 :(得分: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));