编程崽

登录

一叶在编程苦海沉沦的扁舟之上,我是那只激情自射的崽

数字格式整理集合

数字格式整理集合

科学计数法转为原值字符串

js 复制代码
function toNonExponential(input: number | string | bigint): string {
  if (typeof input === 'bigint') {
    return input.toString();
  }

  let dataStr = typeof input === 'string' ? input : input.toString();

  if (isNaN(Number(dataStr))) {
    throw new Error('Input must be a number, a bigint or a string that can be converted to a number');
  }

  if (dataStr.indexOf('e') !== -1) {
    const [numberPart, exponentPart] = dataStr.split('e');
    let [base, decimal = ''] = numberPart.split('.');
    let exponent = Number(exponentPart);
    if (exponent >= 0) {
      return base + decimal.padEnd(exponent + 1, '0');
    } else {
      const decimalPointPos = base.length + exponent;
      if (decimalPointPos <= 0) {
        return '0.' + base.padStart(-exponent, '0') + decimal;
      } else {
        return base.slice(0, decimalPointPos) + '.' + base.slice(decimalPointPos) + decimal;
      }
    }
  } else {
    return dataStr;
  }
}

十进制数字转为任意进制数字字符串

js 复制代码
/**
 * 十进制数字转为任意进制数字字符串
 * @param {String} number 要转为字符串
 * @param {String|Number} radix 可选,取值范围为 2~36,要转成数字字符串的进制,默认为10
 * @return {String}
 */
function NumberToString(number, radix = 10) {
  return number.toString(radix)
}

任意进制转换

js 复制代码
/**
 * 任意进制转换
 * @param {String} number 要转换的数字字符串
 * @param {String|Number} fromAadix 可选,取值范围为 2~36,当前数字字符串的进制,默认为10
 * @param {String|Number} toRadix 可选,取值范围为 2~36,要转成数字字符串的进制,默认为10
 * @return {String}
 */
 function conversionNumberSystems(number, fromAadix = 10, toRadix = 10) {
  let tenNumber = parseInt(number, fromAadix) // 先转成十进制
  return tenNumber.toString(toRadix) // 转为目标进制
}

字符串转为十进制数字

js 复制代码
/**
 * 字符串转为十进制数字
 * @param {String} numStr 要转为十进制数字的字符串
 * @param {String|Number} radix 可选,取值范围为 2~36,numStr 当前的进制,默认为10
 * @return {Number}
 */
function StringToNumber(numStr, radix = 10) {
  return parseInt(numStr, radix)
}

四舍五入到指定位数并补零

当第三个参数为true时,则当结果的小数位小于decimals时,会补充零,返回的将会是字符串格式。

js 复制代码
function toFixed(value: number | string, decimals = 0): string {
  if (isNaN(Number(value))) return 0
  let result = Number(`${Math.round(Number(`${value}e${decimals}`))}e-${decimals}`);
  return result.toFixed(decimals);
};

toFixed(1.555, 2);

裁剪丢弃到指定位数

当第三个参数为true时,则当结果的小数位不够decimals时,会补充零,返回的将会是字符串格式。

注意,这个方法会趋向于让返回结果更小,所以,同样是保留两位,如果传入的value是正数0.245,返回值是0.24;如果传入的value是负数**-0.245**,返回的将是**-0.25**!

ts 复制代码
function toCut(value: number | string, decimals = 0): string {
  if (isNaN(Number(value))) return 0
  let result = Number(`${Math.floor(Number(`${value}e${decimals}`))}e-${decimals}`);
  return result.toFixed(decimals);
};

toCut(0.245, 2) // 0.24
toCut(-0.245, 2) // -0.25

补零

当你需要在一个数字 num 不足 len 位数的时候前面补零操作,用到字符串方法 padStart

js 复制代码
const replenishZero = (num, len, zero = 0) => num.toString().padStart(len, zero)
replenishZero(8, 2) // 08

数字转为 万 亿 的缩略写法

js 复制代码
/**
 * 数字转为 万 亿 的缩略写法
 * @param {Number | String} num 等待转格式的数字
 * @param {Number} fixed 保留位数(四舍五入形式)
 */
export function setNumChinese(num, fixed = false) {
  if (!num && num !== 0 && num !== '') return num
  if (typeof(num) !== 'number' && typeof(num) !== 'string') return num
  let _num = num - 0
  let result = '', unit = ''
  // K M B的格式
  if (_num <= 9999) result = _num
  else if (_num <= 99999999) {
    result = _num / 10000
    unit = '万'
  } else {
    result = _num / 100000000
    unit = '亿'
  }
  let _result
  if (fixed !== false) _result = result.toFixed(fixed) + unit
  else _result = result + unit
  return _result
}

数字转为 123,234,234,000的格式

js 复制代码
/**
 * 数字转为 123,234,234,000的格式
 * @param {Number | String} num 等待转格式的参数
 * 这里本来是使用 toLocaleString 方法,但部分安卓手机不支持
 */
export function setNumFormat(numString) {
  if (!numString && numString !== 0 && numString !== '') return numString
  if (typeof(numString) !== 'number' && typeof(numString) !== 'string') return numString
  numString = numString + ''
  var regForm = /(\d{1,3})(?=(\d{3})+(?:$|\.))/g; // 正则
  var int = numString.replace(regForm,"$1,").split('.')[0] // 整数部分
  var decimals = numString.split('.')[1] // 小数部分
  if (decimals) int = int + '.' + decimals
  return int
}

数字转为 K M B 的缩略写法

js 复制代码
/**
 * 数字转为 K M B 的缩略写法
 * @param {Number | String} num 等待转格式的数字
 * @param {Number} fixed 保留位数(四舍五入形式)
 */
export function setNumKMB(num, fixed = null) {
  if (!num && num !== 0 && num !== '') return num
  if (typeof(num) !== 'number' && typeof(num) !== 'string') return num
  let _num = num - 0
  let result = '', unit = ''
  // K M B的格式
  if (_num <= 999) result = _num
  else if (_num <= 999999) {
    result = _num / 1000
    unit = 'K'
  } else if (_num <= 999999999) {
    result = _num / 1000000
    unit = 'M'
  } else if (_num <= 999999999999) {
    result = _num / 1000000000
    unit = 'B'
  } else {
    result = _num / 1000000000000
    unit = 'T'
  }
  let _result
  if (fixed !== null) _result = result.toFixed(fixed) + unit
  else _result = result + unit
  return _result
}