SLFloat.fromString constructor
SLFloat.fromString( - String s
)
Implementation
SLFloat.fromString(String s) {
final regex = RegExp(
r'\A[ ]*(?<sign>[+-]?)'
r'(?:'
r'(?:'
r'0x'
r'(?:'
r'(?<int>[0-9a-f]*)'
r'(?:'
r'(?:\.(?<frac>[0-9a-f]*))?'
r')?'
r'(?:p(?<exp>[-+]?[\d]*))?'
r')?'
r')'
r'|'
r'(?<dec>[\d]*[.]?[\d]*'
r'(?:e[+-]?[\d]*)?'
r')'
r')',
caseSensitive: false);
final match = regex.firstMatch(s);
double mantissa = 0.0;
if (match?.namedGroup('dec')?.isNotEmpty ?? false) {
mantissa = double.parse(match!.namedGroup('dec')!);
}
if (match?.namedGroup('int')?.isNotEmpty ?? false) {
mantissa = int.parse(match!.namedGroup('int')!, radix: 16).toDouble();
if (match.namedGroup('frac')?.isNotEmpty ?? false) {
mantissa += int.parse(match.namedGroup('frac')!, radix: 16) /
pow(16.0, match.namedGroup('frac')!.length);
}
if (match.namedGroup('exp')?.isNotEmpty ?? false) {
mantissa *= pow(2.0, int.parse(match.namedGroup('exp')!));
}
}
objValue = (match?.namedGroup('sign') == '-') ? -mantissa : mantissa;
}