API / Js / Float

Float

Provide utilities for JS float.

_NaN

let _NaN: float

The special value "Not a Number".

isNaN

let isNaN: float => bool

Tests if the given value is _NaN. Note that both _NaN == _NaN and _NaN === _NaN will return false. isNaN is therefore necessary to test for _NaN.

Returns true if the given value is _NaN, false otherwise.

isFinite

let isFinite: float => bool

Tests if the given value is finite. Returns true if the given value is a finite number, false otherwise.

RES
/* returns [false] */ Js.Float.isFinite(infinity)
RES
/* returns [false] */ Js.Float.isFinite(neg_infinity)
RES
/* returns [false] */ Js.Float.isFinite(Js.Float._NaN)
RES
/* returns [true] */ Js.Float.isFinite(1234.)

toExponential

let toExponential: float => string

Formats a float using exponential (scientific) notation. Returns a string representing the given value in exponential notation. Raises RangeError if digits is not in the range [0, 20] (inclusive).

RES
/* prints "7.71234e+1" */ Js.Float.toExponential(77.1234)->Js.log
RES
/* prints "7.7e+1" */ Js.Float.toExponential(77.)->Js.log

toExponentialWithPrecision

let toExponentialWithPrecision: (float, ~digits: int) => string

Formats a float using exponential (scientific) notation. digits specifies how many digits should appear after the decimal point. The value must be in the range [0, 20] (inclusive).

Returns a string representing the given value in exponential notation.

The output will be rounded or padded with zeroes if necessary. Raises RangeError if digits is not in the range [0, 20] (inclusive).

RES
/* prints "7.71e+1" */ Js.Float.toExponentialWithPrecision(77.1234, ~digits=2)->Js.log

toFixed

let toFixed: float => string

Formats a float using fixed point notation. Returns a string representing the given value in fixed-point notation (usually). Raises RangeError if digits is not in the range [0, 20] (inclusive).

RES
/* prints "12346" (note the rounding) */ Js.Float.toFixed(12345.6789)->Js.log
RES
/* print "1.2e+21" */ Js.Float.toFixed(1.2e21)->Js.log

toFixedWithPrecision

let toFixedWithPrecision: (float, ~digits: int) => string

Formats a float using fixed point notation. digits specifies how many digits should appear after the decimal point. The value must be in the range [0, 20] (inclusive). Defaults to 0.

Returns a string representing the given value in fixed-point notation (usually).

The output will be rounded or padded with zeroes if necessary. Raises RangeError if digits is not in the range [0, 20] (inclusive).

RES
/* prints "12345.7" (note the rounding) */ Js.Float.toFixedWithPrecision(12345.6789, ~digits=1)->Js.log
RES
/* prints "0.00" (note the added zeroes) */ Js.Float.toFixedWithPrecision(0., ~digits=2)->Js.log

toPrecision

let toPrecision: float => string

Formats a float using some fairly arbitrary rules. Returns a string representing the given value in fixed-point (usually).

toPrecision differs from toFixed in that the former will format the number with full precision, while the latter will not output any digits after the decimal point. Raises RangeError if digits is not in the range accepted by this function.

RES
/* prints "12345.6789" */ Js.Float.toPrecision(12345.6789)->Js.log
RES
/* print "1.2e+21" */ Js.Float.toPrecision(1.2e21)->Js.log

toPrecisionWithPrecision

let toPrecisionWithPrecision: (float, ~digits: int) => string

Formats a float using some fairly arbitrary rules. digits specifies how many digits should appear in total. The value must be between 0 and some arbitrary number that's hopefully at least larger than 20 (for Node it's 21. Why? Who knows).

Returns a string representing the given value in fixed-point or scientific notation.

The output will be rounded or padded with zeroes if necessary.

toPrecisionWithPrecision differs from toFixedWithPrecision in that the former will count all digits against the precision, while the latter will count only the digits after the decimal point. toPrecisionWithPrecision will also use scientific notation if the specified precision is less than the number for digits before the decimal point. Raises RangeError if digits is not in the range accepted by this function.

RES
/* prints "1e+4" */ Js.Float.toPrecisionWithPrecision(12345.6789, ~digits=1)->Js.log
RES
/* prints "0.0" */ Js.Float.toPrecisionWithPrecision(0., ~digits=2)->Js.log

toString

let toString: float => string

Formats a float as a string. Returns a string representing the given value in fixed-point (usually).

RES
/* prints "12345.6789" */ Js.Float.toString(12345.6789)->Js.log

toStringWithRadix

let toStringWithRadix: (float, ~radix: int) => string

Formats a float as a string. radix specifies the radix base to use for the formatted number. The value must be in the range [2, 36] (inclusive).

Returns a string representing the given value in fixed-point (usually). Raises RangeError if radix is not in the range [2, 36] (inclusive).

RES
/* prints "110" */ Js.Float.toStringWithRadix(6., ~radix=2)->Js.log
RES
/* prints "11.001000111101011100001010001111010111000010100011111" */ Js.Float.toStringWithRadix(3.14, ~radix=2)->Js.log
RES
/* prints "deadbeef" */ Js.Float.toStringWithRadix(3735928559., ~radix=16)->Js.log
RES
/* prints "3f.gez4w97ry0a18ymf6qadcxr" */ Js.Float.toStringWithRadix(123.456, ~radix=36)->Js.log

fromString

let fromString: string => float

Parses the given string into a float using JavaScript semantics. Returns the number as a float if successfully parsed, _NaN otherwise.

RES
/* returns 123 */ Js.Float.fromString("123")
RES
/* returns 12.3 */ Js.Float.fromString("12.3")
RES
/* returns 0 */ Js.Float.fromString("")
RES
/* returns 17 */ Js.Float.fromString("0x11")
RES
/* returns 3 */ Js.Float.fromString("0b11")
RES
/* returns 9 */ Js.Float.fromString("0o11")
RES
/* returns [_NaN] */ Js.Float.fromString("hello")
RES
/* returns [_NaN] */ Js.Float.fromString("100a")