我的值从0到200,其中0表示质量更好,200表示质量最差。
我如何将(在obj-c / cocoa框架中)转换为0-5的整数最佳?
例如200为0,0为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 = 200
,B = 0
和A' = 5
,B' = 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的方法是首选。