2011-01-25 207 views
4

我有一个从0到200的值,其中0表示质量更好,200表示质量最差。如何将数字范围从0-200转换为1-5范围

我怎么能转换(在OBJ-C/Cocoa框架)是一个整数0-5为5最好?

例如200将是0并且0将是5.

+1

199会变成什么?而且会变成什么? – Dave 2011-01-25 14:58:11

+2

也是,标题和文字不符合范围。 – 2011-01-25 15:12:05

回答

3

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

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

您可能通过只做

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

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

1

令x在0..200中。 DO(200 - X)/ 40,如果你想在0和5,或(200 - X)之间的结果/ 50 + 1,如果你想要的东西1和5

+0

我认为从[a; b]发布一般映射到[c; d] – Alik 2011-01-25 15:30:52

1

之间,我认为应该在哪里工作[0-200 ]是你的质量得分。 5 - ([0-200]/40)

9

在一般的情况下,如果你要变换Q = [A, B]Q' = [A', B'],其中f(A) = B'f(B) = A',然后在空间[A, B]任意X将对[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 

[0, 200]空间中的任意值x将被翻译如下:

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

亚历山大C.的(200 - x)的建议/ 50 + 1是数学上正确如果输出应该被解释为[1,5]区间内的取样点。使用此公式,只有输入为0(从[0,200]中取得),才能输出5。

然而,我期望原来的海报的意图是在每个整数[1,5]是代表性的[0200]的子区间的。例如,5对应子区间[0,39],4对应[40,79]等。如果这是意图,Alexander C.的解决方案对于稍微不同的问题是一个数学上正确的解决方案,在这种情况下Stephen Furlani的方法是首选。