API / Js / Js_float

Js_float

Provide utilities for JS float.

_NaN

The special value "Not a Number"

See: MDN

let _NaN: float

isNaN

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.

return true if the given value is _NaN, false otherwise

see MDN

let isNaN: float => bool

isFinite

Tests if the given value is finite

return true if the given value is a finite number, false otherwise

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

see MDN

let isFinite: float => bool

toExponential

Formats a float using exponential (scientific) notation

return a string representing the given value in exponential notation

raise RangeError if digits is not in the range [0, 20] (inclusive)

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

See MDN

let toExponential: float => string

toExponentialWithPrecision

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).

return a string representing the given value in exponential notation

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

raise 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

see MDN

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

toFixed

Formats a float using fixed point notation

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

raise RangeError if digits is not in the range [0, 20] (inclusive)

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

See MDN

let toFixed: float => string

toFixedWithPrecision

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.

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

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

raise 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 /* prints "0.00" (note the added zeroes) */ Js.Float.toFixedWithPrecision(0., ~digits=2)->Js.log

See MDN

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

toPrecision

Formats a float using some fairly arbitrary rules

return 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.

raise RangeError if digits is not in the range accepted by this function (what do you mean "vague"?)

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

See MDN

let toPrecision: float => string

toPrecisionWithPrecision

Formats a float using some fairly arbitrary rules

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

return 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.

raise RangeError if digits is not in the range accepted by this function (what do you mean "vague"?)

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

See MDN

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

toString

Formats a float as a string

return a string representing the given value in fixed-point (usually)

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

See MDN

let toString: float => string

toStringWithRadix

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).

return a string representing the given value in fixed-point (usually)

raise RangeError if radix is not in the range [2, 36] (inclusive)

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

See MDN

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

fromString

Parses the given string into a float using JavaScript semantics

return the number as a float if successfully parsed, _NaN otherwise.

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