如何将数字范围从0到200转换为1-5范围

时间:2011-01-25 14:48:25

标签: objective-c math

我的值从0到200,其中0表示质量更好,200表示质量最差。

我如何将(在obj-c / cocoa框架中)转换为0-5的整数最佳?

例如200为0,0为5。

5 个答案:

答案 0 :(得分:9)

一般情况下,如果您必须将Q = [A, B]转换为Q' = [A', B']f(A) = B'f(B) = A',则空格X [A, B][A', B']具有以下值:

X' = X * k + d;

,其中

k = (B' - A') / (A - B);

d = A' - B * k;

因此,对于您的情况,我们有A = 200B = 0A' = 5B' = 1,结果:

k = -1/50

d = 5

来自x空格的任意值[0, 200]将翻译如下:

x' = x * (-1 / 50) + 5;

答案 1 :(得分:3)

希望四舍五入在这里工作:

int input;
int output = 5 - (int)floorf( ((float)input)/40.0f);

只需执行

即可获得相同的结果
int output = 5 - (input/40);

但这取决于编译器的数学设置。

答案 2 :(得分:1)

让x在0..200。如果想要0到5之间的结果,请执行(200 - x)/ 40;如果需要1到5之间的结果,请执行(200 - x)/ 50 + 1。

答案 3 :(得分:1)

我认为应该在[0-200]是你的质量得分的地方工作。 5 - ([0-200] / 40)

答案 4 :(得分:0)

如果输出应被解释为[1,5]区间内的采样点,那么Alexander C.对(200 - x)/ 50 + 1的建议在数学上是正确的。使用此公式,只有精确输入0(取自[0,200])才能输出5。

但是,我希望原始海报要求[1,5]中的每个整数代表[0,200]的子区间。例如,5对应于子区间[0,39],4对应[40,79]等。如果这是意图,亚历山大C.的解决方案是针对略有不同的问题的数学上正确的解决方案,在这种情况下Stephen Furlani的方法是首选。