En cuanto al diseño, debe intentar evitar la conversión de NSDecimalNumber o NSDecimals hacia y desde int, float y valores dobles por las mismas razones por las que se recomienda utilizar NSDecimalNumbers: lo ss de precisión y problemas de representación de punto flotante binario. Lo sé, a veces es inevitable (tomando datos de un control deslizante, haciendo cálculos trigonométricos, etc.), pero debes tratar de tomar la información de los usuarios como NSStrings y luego usar initWithString: locale: o decimalNumberWithString: locale: para generar NSDecimalNumbers. Haga todas sus operaciones matemáticas con NSDecimalNumbers y devuelva su representación a los usuarios o guárdelos en SQLite (o donde sea) como su descripción de cadena utilizando descriptionWithLocale :.
Si usted tiene a la entrada de un int, float, o doble, que podría hacer algo como lo siguiente:
int myInt = 3;
NSDecimalNumber *newDecimal = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d", myInt]];
o podría seguir la sugerencia de Ashley para asegurarse de que estás a salvo en la construcción decimal .
Además, como se dice @orj a continuación, también es correcto usar '-initWithFloat:', '-initWithDouble:' y otros métodos. Se declara que estos devuelven 'id', y acabo de verificar que efectivamente devuelven' NSDecimalNumber' en Snow Leopard. –
+1 por mencionar el valor 'decimalValue' de' NSNumber'. Eché de menos totalmente ese en los documentos. –
Tal vez alguien debería cambiar el título a "Cómo hacer algo simple increíblemente complicado". Gracias de todos modos por arreglar las cosas. – turingtested