Quiero convertir una cadena en un doble y, después de hacer algunos cálculos matemáticos, volver a convertirla en una cadena.
¿Cómo hago esto en Objective-C?
¿Hay alguna manera de redondear un doble al entero más cercano también?
objective-c
cocoa
cocoa-touch
rksprst
fuente
fuente
Respuestas:
Puede convertir un NSString en un doble con
El redondeo al int más cercano se puede hacer como
Sinceramente, no estoy seguro de si hay una forma más simplificada de convertir de nuevo en una cadena que
fuente
[[NSNumber numberWithInt:myInt] stringValue]
Para convertir realmente de una cadena a un número correctamente, debe usar una instancia de
NSNumberFormatter
configurado para la configuración regional desde la que está leyendo la cadena.Las diferentes configuraciones regionales formatearán los números de manera diferente. Por ejemplo, en algunas partes del mundo,
COMMA
se usa como separador decimal, mientras que en otras esPERIOD
, y el separador de miles (cuando se usa) se invierte. Excepto cuando es un espacio. O no presente en absoluto.Realmente depende de la procedencia de la entrada. Lo más seguro es configurar una
NSNumberFormatter
forma de entrada y utilizarla-[NSFormatter numberFromString:]
para obtenerlaNSNumber
. Si desea manejar los errores de conversión, puede usarlos-[NSFormatter getObjectValue:forString:range:error:]
en su lugar.fuente
Agregando a la respuesta de olliej, puede convertir de un int a una cadena con
NSNumber
'sstringValue
:stringValue
en unaNSNumber
invocacióndescriptionWithLocale:nil
, dándole una representación de valor de cadena localizada. No estoy seguro de si[NSString stringWithFormat:@"%d",myInt]
le dará una representación adecuadamente localizada demyInt
.fuente
El método de redondeo de olliej es incorrecto para números negativos
Aquí hay una alternativa
Por supuesto, podría usar una función de redondeo de math.h
fuente
Aquí hay una muestra funcional de NSNumberFormatter que lee String de números localizados (xCode 3.2.4, osX 10.6), para ahorrar a los demás las horas que acabo de perder. Cuidado: aunque puede manejar espacios en blanco finales como "8,765.4", esto no puede manejar espacios en blanco iniciales y esto no puede manejar caracteres de texto extraviados. (Cadenas de entrada incorrectas: "8" y "8q" y "8 q".)
fuente
nil
valorNSNumber*
si no se puede analizar. No puedo reproducir ese problema que tuvo con los espacios en blanco iniciales y los caracteres de texto extra, IMO está funcionando correctamente." 28.5 "
analiza como 28.5, y"gibberish28.5"
,"28.5gibberish"
y"gibberish28.5gibberish"
son todos unparseable;" 2 8 . 5. "
no se puede analizar, pero eso no es inusual.fuente
Para la conversión de un número a una cadena, ¿qué tal el uso de la nueva sintaxis de literales (XCode> = 4.4), es un poco más compacto.
(Lo encajona como un NSNumber y lo convierte en una cadena usando el método de descripción de NSObjects )
fuente
Para redondear, probablemente debería usar las funciones C definidas en math.h.
Mantenga presionada la tecla Opción y haga doble clic
round
en Xcode y le mostrará la página de manual con varias funciones para redondear diferentes tipos.fuente
Esta es la forma más fácil que conozco:
fuente
a partir de este ejemplo, puede ver las conversiones en ambos sentidos:
fuente
convertir el texto ingresado en el campo de texto a entero
redondeando al doble más cercano
redondeando al int más cercano (considerando solo valores positivos)
convirtiendo de doble a cadena
o
convirtiendo de int a string
o
fuente
Terminé usando esta práctica macro:
fuente