可能重复:
如何在JavaScript中截取字符串前面的零?
如何在Javascript中最简单且跨浏览器兼容地从数字中删除前导零?
例如,如果我有一个文本框值为014或065,则应该只返回14或65。
可能重复:
如何在JavaScript中截取字符串前面的零?
如何在Javascript中最简单且跨浏览器兼容地从数字中删除前导零?
例如,如果我有一个文本框值为014或065,则应该只返回14或65。
我们可以使用四种方法进行这种转换:
10
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);
对于原始类型Number
,最安全的最大值是2的53-1次方(Number.MAX_SAFE_INTEGER
)。
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
这意味着所有假设 string
可以转换为 number
类型的操作都将失败。
对于大于2的53次方的数字,最近已经添加了原始的BigInt
。在此处检查BigInt
的浏览器兼容性。
转换代码将如下所示。
const numString = '099999999999999999999';
const number = BigInt(numString);
parseInt
时基数很重要?如果未定义或设置基数为0(或不存在),JavaScript将做出以下猜测:
选择的确切基数取决于实现。 ECMAScript 5 指定使用10(十进制),但不是所有浏览器都支持这一点。
因此,在使用 parseInt 时,始终指定基数。
parseInt(“08”,10)
确实是8
。 - naveen正则表达式:
"014".replace(/^0+/, '')
replace(/^(?!0$)0+/, '')
来实现。 - Pranav C Balanreplace(/^0+(?=\d)/, '')
。请注意,这仅是翻译,不包含任何解释或其他内容。 - Pranav C Balan不清楚你为什么想要这样做。如果你想获取正确的数值,你可以使用一元加操作符+
[文档]:
value = +value;
如果你只是想格式化文本,正则表达式可能更好。我会说这取决于你处理的值。如果你只有整数,那么
input.value = +input.value;
也可以。 当然,它也适用于浮点值,但是取决于小数点后有多少位,将其转换为数字再转回字符串可能会(至少对于显示来说)删除一些内容。
x
赋一个字符串,而是一个数字。以零开头会被解释为八进制值。打印x
,你会发现这个值已经是13
了。使用字符串可行:http://jsfiddle.net/fkling/8pYXH/1/。 - Felix Kling+
后,它将变成一个数字(正如文档中所写)。请参见:http://jsfiddle.net/fkling/8pYXH/3/。 - Felix Kling
parseInt
函数有第二个参数——基数,应该总是设置为10
! - Felix Kling