piso doble por lugar decimal

Quiero piso un doble por su lugar decimal con longitud decimal variable (en iphone sdk).

Aquí algunos ejemplos para mostrarte lo que quiero decir.

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 

¿Alguna idea de como hacer esto?

solución

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

Otra solución:

colocado es 10 (Ejemplo: 13.1), 100 (Ejemplo: 12.31) y así sucesivamente

doble valor = (doble) ((sin signo int) (valor * (doble) colocado)) / (doble) colocado

Si solo los redondea para imprimirlos, hágalo con los especificadores de formato estándar de printf. Por ejemplo, en lugar de “% f”, para imprimir 3 decimales puede usar “% .3f”

Use sprintf (o mejor snprintf) para formatearlo en una cadena y luego recorte el final de la cadena.

Multiplíquelo por 10 ^ (lugares decimales), conviértalo en un entero, luego divídalo por 10 ^ (lugares decimales).

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