2011-01-25 2 views
4

J'ai une valeur de 0 à 200 où 0 est de meilleure qualité et 200 la pire qualité.Comment convertir une plage de numéros de 0-200 à 1-5 plage

Comment est-ce que je pourrais convertir (dans le cadre d'obj-c/cacao) cela à un nombre entier de 0-5 étant 5 meilleur?

Par exemple 200 serait 0 et 0 serait 5.

+1

Que deviendrait 199? Et que deviendrais-je? – Dave

+2

également, le titre et le texte ne correspondent pas aux plages. –

Répondre

3

Espérons que l'arrondissement travaille ici:

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

Vous pouvez obtenir les mêmes résultats en faisant juste

int output = 5 - (input/40); 

mais cela dépend des paramètres mathématiques de votre compilateur.

1

Soit x à 0..200. Do (200 - x)/40 si vous voulez un résultat entre 0 et 5, ou (200 - x)/50 + 1 si vous voulez quelque chose entre 1 et 5.

+0

Je pense qu'il serait utile d'afficher la carte générale de [a; b] à [c; d] – Alik

+0

@Konstantin Mikhaylov: déjà [ici] (http://stackoverflow.com/questions/4794847/how-to-convert -a-number-range-from-0-200-into-1-5-range/4794895 # 4794895) –

1

Je pense que cela devrait fonctionner où [0-200 ] est votre score de qualité. 5 - ([0-200]/40)

9

En cas général, si vous devez transformer Q = [A, B] à Q' = [A', B'], où f(A) = B' et f(B) = A', puis un X arbitraire dans l'espace [A, B] aura pour [A', B'] la valeur suivante:

X' = X * k + d; 

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

d = A' - B * k; 

Alors, pour votre cas, nous avons A = 200, B = 0 et A' = 5, B' = 1, ce qui:

k = -1/50 

d = 5 

une valeur arbitraire x de [0, 200] espace sera traduit comme suit:

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

+1 pour les vrais maths –

0

La proposition de Alexander C. de (200 - x)/50 + 1 est mathématiquement correcte si la sortie doit être interprétée comme le point échantillonné dans l'intervalle [1,5]. Avec cette formule, une sortie de 5 n'est possible qu'avec une entrée exacte de 0 (prise de [0,200]).

Cependant, je m'attends à ce que l'affiche originale ait l'intention que chaque entier dans [1,5] soit représentatif d'un sous-intervalle de [0,200]. Par exemple, 5 correspond au sous-intervalle [0,39], et 4 à [40, 79] etc. Si tel est le but, la solution d'Alexander C. est une solution mathématiquement correcte pour un problème légèrement différent, auquel cas L'approche de Stephen Furlani est préférée.

Questions connexes