En esta publicación, aprendemos algunos métodos para analizar / convertir String en un número (entero, doble o ambos).
1. Utilice el método parse()
(no recomendado)
int stringToInt_parse(String input) {
return int.parse(input, onError: (error) {
return NULL;
});
}
double stringToDouble_parse(String input) {
return double.parse(input, (error) {
return NULL;
});
}
num stringToNumber_parse(String input) {
return num.parse(input, (error) {
return NULL;
});
}
Salidas
print(stringToInt_parse(testInt)); // 100
print(stringToDouble_parse(testInt)); // 100.0
print(stringToNumber_parse(testInt)); // 100
print(stringToInt_parse(testDouble)); // NULL
print(stringToDouble_parse(testDouble)); // 100.1
print(stringToNumber_parse(testDouble)); // 100.1
print(stringToInt_parse(testInvalidNumber)); // NULL
print(stringToDouble_parse(testInvalidNumber)); // NULL
print(stringToNumber_parse(testInvalidNumber)); // NULL
Notas:
- Podemos usar double.parse () para convertir una cadena entera válida a int, pero devolverá un doble (Línea 7: 100.0). Y obviamente no podemos convertir un string doble válido en un entero, devolverá nulo (Línea 10: nulo).
- Con num.parse (), el programa intentará analizar primero el número entero, si no puede analizar (obtener un valor nulo), entonces intentará analizar el doble. (Es por eso que en la línea 8, la salida es 100 pero no 100,0).
- No sé exactamente la razón detrás de esto, pero si observa la firma de int.parse (), double.parse () y num.parse (), verá que onError es un parámetro con nombre opcional en int. parse () mientras que con double.parse () y num.parse () es un parámetro posicional opcional.
2. Utilice el método tryParse()
Cuando usamos el método tryParse()
, solo necesitamos proporcionar la cadena de entrada. En caso de que la entrada no sea válida, el programa devolverá un valor nulo. Esta es la diferencia entre tryParse () y parse () (que genera una excepción si no manejamos el método onError).
int stringToInt_tryParse(String input) {
return int.tryParse(input);
}
double stringToDouble_tryParse(String input) {
return double.tryParse(input);
}
num stringToNumber_tryParse(String input) {
return num.tryParse(input);
}
Probar
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(stringToInt_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToNumber_tryParse(testInt)); // 100
print(stringToDouble_tryParse(testInt)); // 100.0
print(stringToDouble_tryParse(testDouble)); // 100.1
print(stringToNumber_tryParse(testDouble)); // 100.1
print(stringToInt_tryParse(testInvalidNumber)); // NULL
print(stringToDouble_tryParse(testInvalidNumber)); // NULL
print(stringToNumber_tryParse(testInvalidNumber)); // NULL
3. (Bonificación) Utilice métodos de extensión
En caso de que no sepa qué son los métodos de extensión, es una forma de agregar más funciones a las bibliotecas / clases existentes. En nuestro caso, usamos esta técnica para agregar 3 métodos a la clase String.
extension StringExtension on String {
int toInt() {
return int.tryParse(this);
}
double toDouble() {
return double.tryParse(this);
}
num toNumber() {
return num.tryParse(this);
}
}
Después de crear la extensión anterior, ahora nuestro String tiene 3 métodos más que podemos usar como otros métodos de salida.
final testInt = '100';
final testDouble = '100.1';
final testInvalidNumber = 'a';
print(testInt.toInt()); // 100
print(testInt.toDouble()); // 100.0
print(testInt.toNumber()); // 100
print(testDouble.toInt()); // NULL
print(testDouble.toDouble()); // 100.1
print(testDouble.toNumber()); // 100.1
print(testInvalidNumber.toInt()); // NULL
print(testInvalidNumber.toDouble()); // NULL
print(testInvalidNumber.toNumber()); // NULL
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter