ts-data-forge
    Preparing search index...

    Function safeParseFloat

    • Safely parses a finite floating-point number from a string, returning a Result that is Ok<FiniteNumber> for valid input and Err<Error> otherwise.

      This is a stricter alternative to both parseFloat and Number:

      • Unlike parseFloat('12abc') (which returns 12), trailing non-numeric characters make the whole input invalid and yield Err.
      • Unlike Number('') / Number(' ') (which return 0), empty or whitespace-only input yields Err.
      • Unlike Number('Infinity') (which returns Infinity), non-finite values yield Err.

      The empty-string case is rejected by delegating to parseFloat (which returns NaN there) rather than hard-coding a check, while the trailing- garbage case is rejected via Number. Decimal values are preserved as-is, so '12.9' stays 12.9.

      Use Result.unwrapOk (optionally with a ?? Number.NaN fallback) or Result.unwrapOkOr to get a plain number back.

      Parameters

      • s: string

        The string to parse.

      Returns Result<FiniteNumber, Error>

      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')));