Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / exotic   js

Repository URL to install this package:

Version: 2.0.8 

/ src / types / primitive / number / cast / toFinite.ts

import { MAX_INTEGER, INFINITY } from '../../../NATIVE/CONSTANTS/NATIVE_SIZES'
import toNumber from './toNumber'

/**
 * Converts `value` to a finite number.
 * @since 5.0.0-beta.7
 * @memberOf cast
 *
 * @param {*} value The value to convert.
 * @return {number} Returns the converted number.
 *
 * {@link https://github.com/lodash/lodash/blob/master/toFinite.js lodash-tofinite}
 * @see {@link lodash-tofinite}
 * @see is/finite
 *
 * @category Lang
 * @fork 4.12.0
 *
 * @example
 *
 *     toFinite(3.2)
 *     // => 3.2
 *
 *     toFinite(Number.MIN_VALUE)
 *     // => 5e-324
 *
 *     toFinite(Infinity)
 *     // => 1.7976931348623157e+308
 *
 *     toFinite('3.2')
 *     // => 3.2
 *
 *     toFinite(NaN)
 *     // => 0
 *
 */
function toFinite(value: any): number {
  // silly check, since casting to number will return a nan at worst
  // and 0 ? 0 : 0 ?
  // AND NaN check is at the end anyway 0.0
  // if (!value) return value === 0 ? value : 0

  value = toNumber(value)

  // when it is infinity,
  // put it -1 * +Infinity,
  // or +1 * -Infinity
  if (value === INFINITY || value === -INFINITY) {
    const sign = value < 0 ? -1 : 1
    return sign * MAX_INTEGER
  }

  // @NOTE this just checks isNaN, should be gtg
  // eslint-disable-next-line
  return value === value ? value : 0
}

export default toFinite