foop
Version:
interfaces that describe their intentions.
61 lines (55 loc) • 4.1 kB
JavaScript
var MAX_INTEGER = require('../native/MAX_INTEGER')
var INFINITY = require('../native/INFINITY')
var toNumber = require('./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) {
// 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) {
var 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
}
module.exports = toFinite
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9GaW5pdGUuanMiLCJzb3VyY2VzIjpbInRvRmluaXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IE1BWF9JTlRFR0VSID0gcmVxdWlyZSgnLi4vbmF0aXZlL01BWF9JTlRFR0VSJylcbmNvbnN0IElORklOSVRZID0gcmVxdWlyZSgnLi4vbmF0aXZlL0lORklOSVRZJylcbmNvbnN0IHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpXG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKiBAc2luY2UgNS4wLjAtYmV0YS43XG4gKiBAbWVtYmVyT2YgY2FzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL3RvRmluaXRlLmpzIGxvZGFzaC10b2Zpbml0ZX1cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC10b2Zpbml0ZX1cbiAqIEBzZWUgaXMvZmluaXRlXG4gKlxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBmb3JrIDQuMTIuMFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgIHRvRmluaXRlKDMuMilcbiAqICAgICAvLyA9PiAzLjJcbiAqXG4gKiAgICAgdG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSlcbiAqICAgICAvLyA9PiA1ZS0zMjRcbiAqXG4gKiAgICAgdG9GaW5pdGUoSW5maW5pdHkpXG4gKiAgICAgLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiAgICAgdG9GaW5pdGUoJzMuMicpXG4gKiAgICAgLy8gPT4gMy4yXG4gKlxuICogICAgIHRvRmluaXRlKE5hTilcbiAqICAgICAvLyA9PiAwXG4gKlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICAvLyBzaWxseSBjaGVjaywgc2luY2UgY2FzdGluZyB0byBudW1iZXIgd2lsbCByZXR1cm4gYSBuYW4gYXQgd29yc3RcbiAgLy8gYW5kIDAgPyAwIDogMCA/XG4gIC8vIEFORCBOYU4gY2hlY2sgaXMgYXQgdGhlIGVuZCBhbnl3YXkgMC4wXG4gIC8vIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMFxuXG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpXG5cbiAgLy8gd2hlbiBpdCBpcyBpbmZpbml0eSxcbiAgLy8gcHV0IGl0IC0xICogK0luZmluaXR5LFxuICAvLyBvciArMSAqIC1JbmZpbml0eVxuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICBjb25zdCBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSlcbiAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSXG4gIH1cblxuICAvLyBATk9URSB0aGlzIGp1c3QgY2hlY2tzIGlzTmFOLCBzaG91bGQgYmUgZ3RnXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwXG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9GaW5pdGVcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQ3BEQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztBQUM5Q0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1DdEMsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFOzs7Ozs7RUFNdkIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Ozs7O0VBS3ZCLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUU7SUFDN0NBLEdBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLElBQUksR0FBRyxXQUFXO0dBQzFCOzs7O0VBSUQsT0FBTyxLQUFLLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDO0NBQ25DOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUTsifQ==