2009-05-25 7 views
2

Comment arrondir un nombre à 50 dans obj c ou C++/cacao?Comment arrondir un nombre à 50 dans obj c/cacao

Je suis en train d'écrire un programme d'impôt, pour la recherche finale, je dois arrondir le revenu pour finir dans 50 avant d'appliquer le taux d'imposition.

La seule alternative que je peux penser est la modification de la chaîne, mais im tremblante dans cette zone,].

+0

Un peu plus de détails pourrait être bon. Voulez-vous dire 101 et 199 devraient tous les deux être 150, 200 devraient être 250, 1,342,528 devrait être 1,342,550, et ainsi de suite? – Chuck

+0

Les deux derniers nombres doivent être transformés en 50. Ce sont des nombres entiers. –

+0

@james, changer les deux derniers chiffres à 50 est assez facile (plus facile que l'arrondi et la troncature). Vous devez juste tronquer à un multiple de 100 puis ajouter 50. Voir ma réponse mise à jour. – paxdiablo

Répondre

5

On ne sait pas si vous voulez le plus proche 50 $ ou 50 cents, est donc ici à la fois:

Pour un entier pour aller à un multiple de 50, vous avez besoin de la formule:

x = int(x/50) * 50    ; for truncation. 
x = int((x + 25)/50) * 50  ; for rounding. 

Pour un flotteur pour aller à un multiple de 0,50, vous avez besoin de la formule:

x = 0.5 * int(x/0.5)    ; for truncation. 
x = 0.5 * int((x + 0.25)/0.5) ; for rounding. 

Mise à jour:

Si vous voulez juste les deux derniers chiffres ont changé à 50, il suffit de faire l'une des:

x = x - (x % 100) + 50 
x = 50 + 100 * int (x/100) 
+0

Vous ne devriez pas utiliser le virgule flottante pour de l'argent ... –

+0

Les virgules sont correctes si vous comprenez leur comportement (pas d'exposants très disparates, pas trop d'ajout et encore moins de multiplication à cause d'erreurs cumulatives), mais vous avez raison. Pour être absolument sûr, vous devriez utiliser des entiers mis à l'échelle ou des classes décimales quelconques. – paxdiablo

+0

Merci, l'arrondi fonctionne bien. Je devrais être plus clair, j'ai besoin que le nombre se termine par "50" les 2 derniers chiffres doivent être changés à 50. C'est pourquoi j'ai eu peur de devoir faire des trucs de cordes, je tiens à le garder en C++/objc et éviter le cacao –

2
x-=x%50; /*for truncating*/ 
0

Donnez à un homme un poisson et il a de quoi manger pour un jour.

Ce que vous voulez savoir, c'est combien de «morceaux» de 50 sont dans un nombre. Cela peut être réalisé par division en virgule flottante.

const double chunksize = 50.; 
const double chunks=income/chunksize; 

Alors, apparemment, vous obtenez un nombre entier de morceaux, en arrondissant, tronquer, ...

const int i_chunks = ceil(chunks); 

Et enfin, vous voulez à l'échelle le nombre de morceaux dans la monnaie d'origine :

const double chunked_income = i_chunks*chunksize; 
+0

"Bâtis un homme, et il va faire chaud un jour, mettre le feu à un homme, et il sera chaud pour le reste de sa vie."- Terry Pratchett :-) – paxdiablo

Questions connexes