étage double par décimale

Je veux sol un double par sa décimale avec longueur décimale variable (dans l’iphone SDK)

voici quelques exemples pour vous montrer ce que je veux dire

NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:2); // should return 34.52 NSLog(@"%f",[self floorMyNumber:34.52662 toPlace:2); // should return 34.52 NSLog(@"%f",[self floorMyNumber:34.52432 toPlace:3); // should return 34.524 NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:3); // should return 34.524 NSLog(@"%f",[self floorMyNumber:34.12462 toPlace:0); // should return 34.0 NSLog(@"%f",[self floorMyNumber:34.92462 toPlace:0); // should return 34.0 

Des idees pour faire cela?

Solution

 -(double)floorNumberByDecimalPlace:(float)number place:(int)place { return (double)((unsigned int)(number * (double)pow(10.0,(double)place))) / (double)pow(10.0,(double)place); } 

Une autre solution:

10 (exemple: 13.1), 100 (exemple: 12.31) sont placés, etc.

double valeur = (double) ((unsigned int) (valeur * (double) placée)) / (double) placée

Si vous les arrondissez simplement pour les imprimer, utilisez les spécificateurs de format printf standard. Par exemple, au lieu de “% f”, pour imprimer 3 décimales, utilisez “% .3f”.

Utilisez sprintf (ou un meilleur snprintf) pour le formater en chaîne, puis rogner la fin de la chaîne.

Multipliez-le par 10 ^ (décimales), convertissez-le en un entier, puis divisez-le par 10 ^ (décimales).

 double floorToPlace(double number, int places) { int decimalPlaces = 1; for (int i = 0; i < places; i++) divideBy *= 10; return (int)(number * decimalPlaces) / (double)decimalPlaces; }