@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
27 lines • 3.52 kB
JavaScript
import { isNumber } from '@terminus/ngx-tools/type-guards';
/**
* Round a number
*
* Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round#A_better_solution
*
* @param num - The number to round (also accepting strings for exponential support)
* @param precision - How precise to make the rounding
* @returns The rounded number
*
* @example
* roundNumber(1.050, 1) // Returns: `1.1`
* roundNumber(3456.3456, 1) // Returns: `3456.3`
* roundNumber(3456.3456, -2) // Returns: `3500`
* roundNumber('1.23e+5', -4) // Returns: `120000`
*/
export function roundNumber(num, precision = 0) {
if (!isNumber(num)) {
return undefined;
}
const shift = function (innerNum, innerPrecision) {
const numArray = innerNum.toString().split('e');
return +(`${numArray[0]}e${numArray[1] ? (+numArray[1] + innerPrecision) : innerPrecision}`);
};
return shift(Math.round(shift(num, +precision)), -precision);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91bmQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRlcm1pbnVzL25neC10b29scy91dGlsaXRpZXMvIiwic291cmNlcyI6WyJyb3VuZC1udW1iZXIvcm91bmQtbnVtYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBb0IsRUFBRSxTQUFTLEdBQUcsQ0FBQztJQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBUyxRQUF5QixFQUFFLGNBQXNCO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdAdGVybWludXMvbmd4LXRvb2xzL3R5cGUtZ3VhcmRzJztcblxuXG4vKipcbiAqIFJvdW5kIGEgbnVtYmVyXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL3JvdW5kI0FfYmV0dGVyX3NvbHV0aW9uXG4gKlxuICogQHBhcmFtIG51bSAtIFRoZSBudW1iZXIgdG8gcm91bmQgKGFsc28gYWNjZXB0aW5nIHN0cmluZ3MgZm9yIGV4cG9uZW50aWFsIHN1cHBvcnQpXG4gKiBAcGFyYW0gcHJlY2lzaW9uIC0gSG93IHByZWNpc2UgdG8gbWFrZSB0aGUgcm91bmRpbmdcbiAqIEByZXR1cm5zIFRoZSByb3VuZGVkIG51bWJlclxuICpcbiAqIEBleGFtcGxlXG4gKiByb3VuZE51bWJlcigxLjA1MCwgMSkgICAgICAvLyBSZXR1cm5zOiBgMS4xYFxuICogcm91bmROdW1iZXIoMzQ1Ni4zNDU2LCAxKSAgLy8gUmV0dXJuczogYDM0NTYuM2BcbiAqIHJvdW5kTnVtYmVyKDM0NTYuMzQ1NiwgLTIpIC8vIFJldHVybnM6IGAzNTAwYFxuICogcm91bmROdW1iZXIoJzEuMjNlKzUnLCAtNCkgLy8gUmV0dXJuczogYDEyMDAwMGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kTnVtYmVyKG51bTogbnVtYmVyIHwgc3RyaW5nLCBwcmVjaXNpb24gPSAwKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpc051bWJlcihudW0pKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24oaW5uZXJOdW06IG51bWJlciB8IHN0cmluZywgaW5uZXJQcmVjaXNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbnVtQXJyYXkgPSBpbm5lck51bS50b1N0cmluZygpLnNwbGl0KCdlJyk7XG4gICAgcmV0dXJuICsoYCR7bnVtQXJyYXlbMF19ZSR7bnVtQXJyYXlbMV0gPyAoK251bUFycmF5WzFdICsgaW5uZXJQcmVjaXNpb24pIDogaW5uZXJQcmVjaXNpb259YCk7XG4gIH07XG5cbiAgcmV0dXJuIHNoaWZ0KE1hdGgucm91bmQoc2hpZnQobnVtLCArcHJlY2lzaW9uKSksIC1wcmVjaXNpb24pO1xufVxuIl19