The string to parse.
Result.ok(parsedFloat) for valid finite input, otherwise
Result.err wrapping an Error describing the invalid input.
assert.strictEqual(
Result.unwrapOkOr(Num.safeParseFloat('12.9'), Number.NaN),
12.9,
);
assert.strictEqual(
Result.unwrapOkOr(Num.safeParseFloat('-3.5'), Number.NaN),
-3.5,
);
assert.strictEqual(
Result.unwrapOkOr(Num.safeParseFloat('1e3'), Number.NaN),
1000,
);
// Native `parseFloat` ignores trailing non-numeric characters
assert.strictEqual(Number.parseFloat('12px'), 12);
assert.isTrue(Result.isErr(Num.safeParseFloat('12px')));
// Whitespace is not a valid number, so we return an error instead of coercing to 0.
assert.isTrue(Result.isErr(Num.safeParseFloat('')));
assert.isTrue(Result.isErr(Num.safeParseFloat(' ')));
// Infinity and NaN are not finite, so they are rejected.
assert.isTrue(Result.isErr(Num.safeParseFloat('Infinity')));
assert.isTrue(Result.isErr(Num.safeParseFloat('NaN')));
Safely parses a finite floating-point number from a string, returning a Result that is
Ok<FiniteNumber>for valid input andErr<Error>otherwise.This is a stricter alternative to both
parseFloatandNumber:parseFloat('12abc')(which returns12), trailing non-numeric characters make the whole input invalid and yieldErr.Number('')/Number(' ')(which return0), empty or whitespace-only input yieldsErr.Number('Infinity')(which returnsInfinity), non-finite values yieldErr.The empty-string case is rejected by delegating to
parseFloat(which returnsNaNthere) rather than hard-coding a check, while the trailing- garbage case is rejected viaNumber. Decimal values are preserved as-is, so'12.9'stays12.9.Use
Result.unwrapOk(optionally with a?? Number.NaNfallback) orResult.unwrapOkOrto get a plain number back.