2010-03-02 7 views
1

je dois veiller à ce que les valeurs transmises à une de mes classes tenir sur une grille avec des cellules de 4pxassurer un nombre est un facteur d'un autre numéro

Donc, si 16 est transmis

16%4==0 //this is fine 

cependant

17%4==1 //not ok 

J'ai besoin du programme pour convertir la valeur en fonction de la grille, de sorte que dans le dernier cas, 17 seraient converties en 16 (arrondir vers le bas), si elle était 19 il se convertit à 20 (arrondir) etc.

Alors, y a-t-il une bibliothèque qui va le faire pour moi?

+0

@jax: Vous devez définir votre premier arrondi. Par exemple: 18, est-il arrondi à la hausse ou à la baisse? –

+0

Comment 17 articles pourraient-ils tenir sur une grille 4x4? Je pense que tu devrais toujours t'arrêter. – paxdiablo

+0

Une bonne façon d'étoffer ceci est d'écrire le test unitaire en premier pour toutes les valeurs qui doivent être correctes. Cela rend très souvent extrêmement facile de voir comment cela devrait être fait. Dans votre cas, écrivez un cas de test pour tous les nombres de 1 à 31. –

Répondre

1

Je pense que cela fait ce que vous voulez, y compris l'arrondi partie.

int gridVal = (((int) val + 2)/4) * 4 

Modifier complet:

Si vous souhaitez arrondir 18 vers le bas, puis utilisez cette statment.

int gridVal = (((int) val + 1)/4) * 4 

Si vous voulez également traiter des valeurs négatives, vous avez besoin d'un conditionnel.

int gridVal = ((val >= 0 ? (int) val + 2 : (int) val - 2)/4) * 4 

Modifier la taille de la grille variable (même):

int halfGrid = gridSize/2; 
int gridVal = ((val >= 0 ? (int) val + halfGrid : (int) val - halfGrid)/gridSize) * gridSize; 
+0

J'aime ça parce qu'il n'utilise pas de fonctions merci – jax

+0

pour 18, son aller à 16 ne remplit pas l'exigence de la question – Adeel

+0

non ((18 + 2)/4) * 4 = (20/4) * 4 = 20 – jax

1

Est-ce que cela fonctionne pour vous?

val = val - (val % 4) 

Maintenant, avec l'arrondissement

val = Round(val/4) * 4 
+0

gentil un simple merci, il ne arrondit pas vers le haut mais peut-être cela n'a pas d'importance – jax

+0

@jax, a manqué toute la chose ronde, désolé. – jasonbar

1

Essayez quelque chose comme

Devide par le nombre, puis Round et multiplier par le nombre.

Quelque chose comme

val = Round(val/4) * 4 
Questions connexes