toNumValue function
Converts data
to num
or throws FormatException if cannot convert.
Returned value is either int
or double
that implement num
.
If provided min
and max
are used to clamp the returned value.
Implementation
num toNumValue(Object? data, {num? min, num? max}) {
if (data == null) throw const NullValueException();
num result;
if (data is num) {
result = data;
} else if (data is BigInt) {
result = data.isValidInt ? data.toInt() : data.toDouble();
} else if (data is String) {
// first try to parse as int, otherwise as double, and if that fails throws
result = int.tryParse(data) ?? double.parse(data);
} else if (data is bool) {
result = data ? 1 : 0;
} else {
throw ConversionException(target: num, data: data);
}
if (min != null && result < min) {
result = min;
}
if (max != null && result > max) {
result = max;
}
return result;
}