Parses a string containing a number literal into a number.
The method first tries to read the input
as integer (similar to
int.parse without a radix).
If that fails, it tries to parse the input
as a double (similar to
double.parse).
If that fails, too, it invokes onError
with input
, and the result
of that invocation becomes the result of calling parse
.
If no onError
is supplied, it defaults to a function that throws a
FormatException.
For any number n
, this function satisfies
identical(n, num.parse(n.toString()))
(except when n
is a NaN double
with a payload).
Source
static num parse(String input, [num onError(String input)]) {
String source = input.trim();
// TODO(lrn): Optimize to detect format and result type in one check.
num result = int.parse(source, onError: _returnIntNull);
if (result != null) return result;
result = double.parse(source, _returnDoubleNull);
if (result != null) return result;
if (onError == null) throw new FormatException(input);
return onError(input);
}