我有一个从0到200的值,其中0表示质量更好,200表示质量最差。如何将数字范围从0-200转换为1-5范围
我怎么能转换(在OBJ-C/Cocoa框架)是一个整数0-5为5最好?
例如200将是0并且0将是5.
我有一个从0到200的值,其中0表示质量更好,200表示质量最差。如何将数字范围从0-200转换为1-5范围
我怎么能转换(在OBJ-C/Cocoa框架)是一个整数0-5为5最好?
例如200将是0并且0将是5.
希望四舍五入在这里工作:
int input;
int output = 5 - (int)floorf(((float)input)/40.0f);
您可能通过只做
得到相同的结果int output = 5 - (input/40);
但它取决于你的编译器的数学设置。
令x在0..200中。 DO(200 - X)/ 40,如果你想在0和5,或(200 - X)之间的结果/ 50 + 1,如果你想要的东西1和5
我认为从[a; b]发布一般映射到[c; d] – Alik 2011-01-25 15:30:52
之间,我认为应该在哪里工作[0-200 ]是你的质量得分。 5 - ([0-200]/40)
在一般的情况下,如果你要变换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 = 200
,B = 0
和A' = 5
,B' = 1
,导致:
k = -1/50
d = 5
从[0, 200]
空间中的任意值x
将被翻译如下:
x' = x * (-1/50) + 5;
亚历山大C.的(200 - x)的建议/ 50 + 1是数学上正确如果输出应该被解释为[1,5]区间内的取样点。使用此公式,只有输入为0(从[0,200]中取得),才能输出5。
然而,我期望原来的海报的意图是在每个整数[1,5]是代表性的[0200]的子区间的。例如,5对应子区间[0,39],4对应[40,79]等。如果这是意图,Alexander C.的解决方案对于稍微不同的问题是一个数学上正确的解决方案,在这种情况下Stephen Furlani的方法是首选。
199会变成什么?而且会变成什么? – Dave 2011-01-25 14:58:11
也是,标题和文字不符合范围。 – 2011-01-25 15:12:05