foop
Version:
interfaces that describe their intentions.
63 lines (59 loc) • 4.37 kB
JavaScript
var isNaN = require('../is/NaN')
var toNumber = require('./toNumber')
/**
* @name toInteger
* @alias toInt
*
* @since 5.0.0-beta.6
* @memberOf cast
*
* @param {*} x anything
* @return {number} Number(x) if x is not nan
*
* {@link https://github.com/andrewplummer/Sugar/blob/master/lib/common.js#L322 sugar-topositiveinteger}
* {@link https://github.com/lodash/lodash/blob/master/toInteger.js lodash-tointeger}
* {@link https://github.com/chriso/validator.js/blob/master/src/lib/toInteger.js validator-tointeger}
* {@link https://tc39.github.io/ecma262/#sec-tointeger emca-tointeger}
* @see {@link emca-tointeger}
* @see {@link validator-tointeger}
* @see {@link lodash-tointeger}
* @see {@link sugar-topositiveinteger}
* @see cast/number
* @see is/NaN
*
* @example
*
* toInteger(10) // => 10
* toInteger(NaN) // => +0
* toInteger(+Infinity) // => +Infinity
* toInteger('100') // => +100
*
* @example
*
* toInteger(3.2)
* //=> 3
*
* toInteger(Number.MIN_VALUE)
* //=> 0
*
* toInteger(Infinity)
* //=> 1.7976931348623157e+308
*
* toInteger('3.2')
* //=> 3
*
*/
function toInteger(x) {
var number = toNumber(x)
if (isNaN(number)) {
return +0
}
else if (number === 0 || number === -Infinity || number === +Infinity) {
return number
}
else {
return Math.sign(number) * Math.floor(Math.abs(number))
}
}
module.exports = toInteger
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9JbnRlZ2VyLmpzIiwic291cmNlcyI6WyJ0b0ludGVnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNOYU4gPSByZXF1aXJlKCcuLi9pcy9OYU4nKVxuY29uc3QgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJylcblxuLyoqXG4gKiBAbmFtZSB0b0ludGVnZXJcbiAqIEBhbGlhcyB0b0ludFxuICpcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjZcbiAqIEBtZW1iZXJPZiBjYXN0XG4gKlxuICogQHBhcmFtIHsqfSB4IGFueXRoaW5nXG4gKiBAcmV0dXJuIHtudW1iZXJ9IE51bWJlcih4KSBpZiB4IGlzIG5vdCBuYW5cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld3BsdW1tZXIvU3VnYXIvYmxvYi9tYXN0ZXIvbGliL2NvbW1vbi5qcyNMMzIyIHN1Z2FyLXRvcG9zaXRpdmVpbnRlZ2VyfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL3RvSW50ZWdlci5qcyBsb2Rhc2gtdG9pbnRlZ2VyfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc28vdmFsaWRhdG9yLmpzL2Jsb2IvbWFzdGVyL3NyYy9saWIvdG9JbnRlZ2VyLmpzIHZhbGlkYXRvci10b2ludGVnZXJ9XG4gKiB7QGxpbmsgaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbnRlZ2VyIGVtY2EtdG9pbnRlZ2VyfVxuICogQHNlZSB7QGxpbmsgZW1jYS10b2ludGVnZXJ9XG4gKiBAc2VlIHtAbGluayB2YWxpZGF0b3ItdG9pbnRlZ2VyfVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLXRvaW50ZWdlcn1cbiAqIEBzZWUge0BsaW5rIHN1Z2FyLXRvcG9zaXRpdmVpbnRlZ2VyfVxuICogQHNlZSBjYXN0L251bWJlclxuICogQHNlZSBpcy9OYU5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgdG9JbnRlZ2VyKDEwKSAgICAgICAgIC8vID0+IDEwXG4gKiAgIHRvSW50ZWdlcihOYU4pICAgICAgICAvLyA9PiArMFxuICogICB0b0ludGVnZXIoK0luZmluaXR5KSAgLy8gPT4gK0luZmluaXR5XG4gKiAgIHRvSW50ZWdlcignMTAwJykgICAgICAvLyA9PiArMTAwXG4gKlxuICogIEBleGFtcGxlXG4gKlxuICogICB0b0ludGVnZXIoMy4yKVxuICogICAvLz0+IDNcbiAqXG4gKiAgIHRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKVxuICogICAvLz0+IDBcbiAqXG4gKiAgIHRvSW50ZWdlcihJbmZpbml0eSlcbiAqICAgLy89PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqICAgdG9JbnRlZ2VyKCczLjInKVxuICogICAvLz0+IDNcbiAqXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih4KSB7XG4gIGNvbnN0IG51bWJlciA9IHRvTnVtYmVyKHgpXG5cbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gKzBcbiAgfVxuICBlbHNlIGlmIChudW1iZXIgPT09IDAgfHwgbnVtYmVyID09PSAtSW5maW5pdHkgfHwgbnVtYmVyID09PSArSW5maW5pdHkpIHtcbiAgICByZXR1cm4gbnVtYmVyXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguc2lnbihudW1iZXIpICogTWF0aC5mbG9vcihNYXRoLmFicyhudW1iZXIpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9JbnRlZ2VyXG4iXSwibmFtZXMiOlsiY29uc3QiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkN0QyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUU7RUFDcEJBLEdBQUssQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQzs7RUFFMUIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDakIsT0FBTyxDQUFDLENBQUM7R0FDVjtPQUNJLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxRQUFRLElBQUksTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFO0lBQ3JFLE9BQU8sTUFBTTtHQUNkO09BQ0k7SUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ3hEO0NBQ0Y7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTOyJ9