Pregunta muy simple aquí. Tengo un doble que deseo convertir de nuevo a un NSInteger, truncando al lugar de las unidades. ¿Como podría hacerlo?¿Cómo convertir un doble a NSInteger?
Respuesta
truncamiento es una conversión implícita:
NSInteger theInteger = theDouble;
Eso suponiendo que no está comprobando el valor está dentro del rango de NSInteger. Si quieres hacer eso, usted tiene que añadir un poco de ramificación:
NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
// ...
} else if (theDouble < NSIntegerMin) {
// ...
} else {
theInteger = theDouble;
}
Exactamente lo que estaba buscando, gracias. Se agregó la bonificación de verificar el rango, excepto que no tengo que preocuparme por eso para mi uso. ¡Gracias de nuevo! –
Mencionaste redondear en un comentario. Use 'ceil (theDouble)' para redondear, 'floor (theDouble)' para redondear hacia abajo. Recuerde que para los números negativos, el redondeo se redondea hacia cero, y el redondeo hacia abajo es redondeado hacia el infinito negativo. –
+1: ahh hice una función de redondeo simple a continuación ... no recuerdo el techo y el piso para los dobles. respuesta mucho mejor y más precisa –
NSInteger es un typedef para un tipo C. Por lo que sólo puede hacer:
double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;
Lo cual, por la especificación C, truncará OriginalNumber.
Parece que obtuvo la misma respuesta al mismo tiempo. :) –
Sí, pero el alcance cubierto por Jonathan, definitivamente merece el tic. – Tommy
pero de todos modos, si quiere enviar un redondeo, creo que esto debería funcionar simplemente
double myDouble = 10.4223;
NSInteger myInt = myDouble;
de edición para redondear: (estoy seguro theres una manera mucho más simple (y preciso) para hacer esto .. (esto también no da cuenta de los números negativos o límites máximos)
double myDecimal = myDouble - myInt;
if(myDecimal < 0.50)
{
//do nothing
}
else
{
myInt = myInt + 1;
}
NSInteger es un typedef, es lo mismo que usar un int Basta con asignar el valor como:.
double d;
NSInteger i = d;
JesseNaugher menciona el redondeo y observo que las necesidades de OP se cumplieron con un simple truncamiento, pero en el espíritu de la generalización completa vale la pena recordar el truco simple de agregar 0.5 al doble antes de invocar piso() para lograr el redondeo. Extendiendo el comentario de Jonathan Grynspan: NSInteger myInt = floor(myDouble + 0.5);
es decir, redondeando en términos absolutos. Si redondear 'hacia arriba' significa redondear desde cero, se necesita un enfoque más enrevesado: NSInteger myInt = floor(myDouble + (myDouble < 0.0 ? -0.5 : 0.5));
- 1. Cómo convertir un NSInteger a un int?
- 2. ¿Convertir NSInteger a NSUInteger?
- 3. ¿Cómo puedo convertir un NSInteger a NSTimeInterval
- 4. Cómo convertir NSIndexPath a NSInteger?
- 5. cómo convertir NSinteger a String
- 6. Convertir NSInteger a NSIndexpath
- 7. Cómo convertir NSInteger a un valor binario (cadena)
- 8. ¿Cómo convertir bytes a un doble?
- 9. ¿Cómo convertir un doble a hexadecimal?
- 10. Convertir hexadecimal a doble
- 11. convertir doble a int
- 12. ¿Convierte NSString a NSInteger?
- 13. ¿Es posible enviar un NSInteger a NSNumber?
- 14. Convertir cadena a doble - VB
- 15. ¿Cómo convertir un doble a largo sin fundición?
- 16. Añadir NSInteger a NSMutableData
- 17. Cómo convertir NSIndexpath en NSInteger o simplemente int?
- 18. Convertir un doble a un int en Javascript sin redondeo
- 19. Convertir de matriz doble a puntero
- 20. Convertir doble para cuerda
- 21. para comparar el doble y el decimal ¿Debería convertir doble a decimal o decimal a doble?
- 22. convertir matriz decimal a matriz doble
- 23. Cómo convertir el número de Int a Número doble?
- 24. Cómo convertir el tipo de doble a cadena de iPhone?
- 25. conversión de NSNumber a NSInteger
- 26. ¿es necesario liberar un NSInteger en iphone?
- 27. Cómo convertir a doble con 2 precisión - cadena tras punto?
- 28. ¿Cómo comparar dos NSInteger?
- 29. añadiendo objeto NSInteger a NSMutableArray
- 30. ¿Cómo convertir de forma segura este doble en un int?
¿Por qué razón desea un NSInteger en lugar de un NSNumber? también quieres redondeo o simplemente un corte recto? –
Ahora que lo pienso, sería bueno tenerlo rondando. –