从 Javascript 中的数字中删除前导零

2022-08-30 01:47:52

可能的重复:
截断 Javascript 中字符串的前导零

在Javascript中从数字中删除前导零的最简单和跨浏览器兼容的方法是什么?

例如,如果我的文本框值为014或065,它应该只返回14或65


答案 1

我们可以使用四种方法进行此转换

  1. 基数parseInt 10
  2. 数字构造函数
  3. 一元加运算符
  4. 使用数学函数(减法)

const numString = "065";

//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);

// Number constructor
number = Number(numString);
console.log(number);

// unary plus operator
number = +numString;
console.log(number);

// conversion using mathematical function (subtraction)
number = numString - 0;
console.log(number);


更新(基于评论):为什么这不适用于“大数字”?

对于基元类型,最安全的最大值是 253-1Number.MAX_SAFE_INTEGER)。Number

console.log(Number.MAX_SAFE_INTEGER);

现在,让我们考虑数字字符串“099999999999999999999”,并尝试使用上述方法进行转换

const numString = '099999999999999999999';

let parsedNumber = parseInt(numString, 10);
console.log(`parseInt(radix=10) result: ${parsedNumber}`);

parsedNumber = Number(numString);
console.log(`Number conversion result: ${parsedNumber}`);

parsedNumber = +numString;
console.log(`Appending Unary plus operator result: ${parsedNumber}`);

parsedNumber = numString - 0;
console.log(`Subtracting zero conversion result: ${parsedNumber}`);

所有结果都是不正确的。

这是因为,在转换时,numString 值大于 。即Number.MAX_SAFE_INTEGER

99999999999999999999 > 9007199254740991

这意味着在假设可以转换为类型的情况下执行的所有操作都将失败。stringnumber

对于大于 253 的数字,最近添加了原始 BigInt。检查此处的浏览器兼容性。BigInt

转换代码将如下所示。

const numString = '099999999999999999999';
const number = BigInt(numString);

P.S:为什么基数对它很重要?parseInt

如果基数未定义或为 0(或不存在),JavaScript 将假定以下内容:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制),并解析字符串的其余部分
  • 如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)
  • 如果输入字符串以任何其他值开头,则基数为 10(十进制)

究竟选择哪个基数取决于实现。ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持此功能。

因此,在使用 parseInt 时,请始终指定基数


答案 2

正则表达式:

"014".replace(/^0+/, '')