123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.getNumberPrecision = getNumberPrecision;
- exports.isE = isE;
- exports.isEmpty = isEmpty;
- exports.num2str = num2str;
- exports.trimNumber = trimNumber;
- exports.validateNumber = validateNumber;
- var _supportUtil = require("./supportUtil");
- function isEmpty(value) {
- return !value && value !== 0 && !Number.isNaN(value) || !String(value).trim();
- }
- /**
- * Format string number to readable number
- */
- function trimNumber(numStr) {
- var str = numStr.trim();
- var negative = str.startsWith('-');
- if (negative) {
- str = str.slice(1);
- }
- str = str
- // Remove decimal 0. `1.000` => `1.`, `1.100` => `1.1`
- .replace(/(\.\d*[^0])0*$/, '$1')
- // Remove useless decimal. `1.` => `1`
- .replace(/\.0*$/, '')
- // Remove integer 0. `0001` => `1`, 000.1' => `.1`
- .replace(/^0+/, '');
- if (str.startsWith('.')) {
- str = "0".concat(str);
- }
- var trimStr = str || '0';
- var splitNumber = trimStr.split('.');
- var integerStr = splitNumber[0] || '0';
- var decimalStr = splitNumber[1] || '0';
- if (integerStr === '0' && decimalStr === '0') {
- negative = false;
- }
- var negativeStr = negative ? '-' : '';
- return {
- negative: negative,
- negativeStr: negativeStr,
- trimStr: trimStr,
- integerStr: integerStr,
- decimalStr: decimalStr,
- fullStr: "".concat(negativeStr).concat(trimStr)
- };
- }
- function isE(number) {
- var str = String(number);
- return !Number.isNaN(Number(str)) && str.includes('e');
- }
- /**
- * [Legacy] Convert 1e-9 to 0.000000001.
- * This may lose some precision if user really want 1e-9.
- */
- function getNumberPrecision(number) {
- var numStr = String(number);
- if (isE(number)) {
- var precision = Number(numStr.slice(numStr.indexOf('e-') + 2));
- var decimalMatch = numStr.match(/\.(\d+)/);
- if (decimalMatch !== null && decimalMatch !== void 0 && decimalMatch[1]) {
- precision += decimalMatch[1].length;
- }
- return precision;
- }
- return numStr.includes('.') && validateNumber(numStr) ? numStr.length - numStr.indexOf('.') - 1 : 0;
- }
- /**
- * Convert number (includes scientific notation) to -xxx.yyy format
- */
- function num2str(number) {
- var numStr = String(number);
- if (isE(number)) {
- if (number > Number.MAX_SAFE_INTEGER) {
- return String((0, _supportUtil.supportBigInt)() ? BigInt(number).toString() : Number.MAX_SAFE_INTEGER);
- }
- if (number < Number.MIN_SAFE_INTEGER) {
- return String((0, _supportUtil.supportBigInt)() ? BigInt(number).toString() : Number.MIN_SAFE_INTEGER);
- }
- numStr = number.toFixed(getNumberPrecision(numStr));
- }
- return trimNumber(numStr).fullStr;
- }
- function validateNumber(num) {
- if (typeof num === 'number') {
- return !Number.isNaN(num);
- }
- // Empty
- if (!num) {
- return false;
- }
- return (
- // Normal type: 11.28
- /^\s*-?\d+(\.\d+)?\s*$/.test(num) ||
- // Pre-number: 1.
- /^\s*-?\d+\.\s*$/.test(num) ||
- // Post-number: .1
- /^\s*-?\.\d+\s*$/.test(num)
- );
- }
|