Estoy tratando de convertir números tomados de un UITextField, que supongo, son en realidad Strings, y convertirlos a Float, para poder multiplicarlos.
Tengo dos UITextfield
s que se declaran de la siguiente manera:
@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField
Cuando el usuario presiona un botón UIB, quiero calcular los salarios que gana el usuario, pero no puedo, ya que primero necesito convertirlos en flotadores, antes de poder usarlos.
Sé cómo convertirlos en un número entero haciendo esto:
var wageConversion:Int = 0
wageConversion = wage.text.toInt()!
Sin embargo, no tengo idea de cómo convertirlos en flotantes.
fuente
NSString
tienefloatValue
extensión peroString
no la tiene. Obtener error:'String' does not have member named floatValue
let floatValue = (Float)(Wage.text)
... En Swift 2.0Porque en algunas partes del mundo, por ejemplo, se usa una coma en lugar de un decimal. Es mejor crear un NSNumberFormatter para convertir una cadena en flotante.
fuente
Convierto String a Float de esta manera:
fuente
NSString.floatValue
, que simplemente regresa0
si algo está mal). Tenga en cuenta queNSNumberFormatter
se cambióNumberFormatter
.Actualizar
La respuesta aceptada muestra una forma más actualizada de hacer
Rápido 1
Así ha demostrado Paul Hegarty en la clase CS193p de Stanford en 2015:
Incluso puede crear una propiedad calculada para no tener que hacer eso cada vez
fuente
Usando la solución aceptada, descubrí que mi "1.1" (cuando usaba la conversión .floatValue) se convertiría en 1.10000002384186, que no era lo que quería. Sin embargo, si usara .doubleValue en su lugar, obtendría el 1.1 que quería.
Entonces, por ejemplo, en lugar de usar la solución aceptada, usé esto en su lugar:
En mi caso, no necesitaba doble precisión, pero usar .floatValue no me estaba dando el resultado adecuado.
Solo quería agregar esto a la discusión en caso de que alguien más se hubiera encontrado con el mismo problema.
fuente
A continuación se le dará un flotador opcional, pegue un! al final si sabe que es un Float, o use if / let.
fuente
Aquí hay una adaptación de Swift 3 de la solución de Paul Hegarty de la respuesta de rdprado, con algunas comprobaciones de opcionales agregadas (devolviendo 0.0 si falla alguna parte del proceso):
Por cierto, tomé la clase CS193p de Stanford usando la Universidad de iTunes cuando todavía estaba enseñando Objective-C.
Encontré a Paul Hegarty como un instructor FANTÁSTICO, y recomendaría la clase a cualquiera que esté comenzando como desarrollador de iOS en Swift.
fuente
NumberFormatter
para tratar los números de punto flotante introducidos por el usuario.fuente
En rápido 4
fuente
fuente
return Float(self)
?Tiene dos opciones que son bastante similares (por el enfoque y el resultado):
fuente
Double()
construye un Double a partir de un Int, así:var convertedDouble = Double(someInt)
Tenga en cuenta que esto solo funcionará si su texto realmente contiene un número. Como
Wage
es un campo de texto, el usuario puede ingresar lo que quiera y esto desencadenará un error de tiempo de ejecución cuando vaya a desempaquetar el Opcional devueltotoInt()
. Debe verificar que la conversión se haya realizado correctamente antes de forzar el desempaquetado.Editar:
Si está seguro de que el texto será un número entero, puede hacer algo como esto (tenga
text
en cuenta que en UITextField también es opcional)):fuente
wageConversionFloat
nunca será el flotador, se bloquea directamente si la cadena de entrada es una especie de flotador234.56
. ¿cómo podría ser una solución aceptada / votada a favor ...?3
si el campo de texto tiene3.5
. Esto se debe a que el texto se convierte primero en unInt
, luegoInt
se convierte en unFloat
.Encontré otra forma de tomar un valor de entrada de un UITextField y convertirlo en un flotador:
fuente
puedes usar,
Si desea redondear el flotador a 2 decimales:
fuente
Así es como lo abordé. No quería "cruzar el puente", ya que se ha eliminado de Xcode 6 beta 5 de todos modos, rápido y sucio:
fuente
toDouble()
función con la cadena "10", quiero decir, si no hay decimal. De todos modos se estrellará. Porque en ese caso el recuento será 1 y no lo estás manejando. Se estrellará enelse if comps[0] == "" || comps[1] == ""
. De todos modos, eres tan serio en la conversión.En aras de la integridad, esta es una solución que utiliza una extensión de la
UITextField
cual también puede considerar una configuración regional diferente.Para Swift 3+
fuente
Float?
y no tratar los valores no válidos como0.0
. Deje que la persona que llama haga algo comolet val = field.floatValue ?? 0.0
si un caso dado debería tratar el mal resultado como cero.Swift 4/5, use solo Float (valor).
Respuesta: 123200
fuente
Utilizar este:
fuente
Manera fácil:
puede usar el mismo enfoque para otros cálculos, ¡espero que esto ayude!
fuente
float