为什么javascript parseInt忽略字符串中的前导零?

时间:2016-02-06 07:53:14

标签: javascript

我正在尝试将字符串转换为数字,即" 09"

parseInt('09') //returns 9 always

获得前导零的数字的最佳方法是什么?如果有人解释,为什么设计的parseInt不会关注前导零,这会更好。

2 个答案:

答案 0 :(得分:7)

int不能有前导零,因为它们没有任何数学意义。

要存储数字,语言使用二进制表示(不要忘记最后的所有内容都是0和1)。此表示形式对于9,99或00009是相同的。当必须打印数字时,它将被转换回字符串表示,因此您将丢失前导零。

如果您需要存储/记住0,您唯一的选择是存储数字的字符串表示。

你可以做的是存储数字和字符串表示,如下所示:

function MyInt(s){
    this.asString = s;
    this.num = parseInt(s);
}


var i = new MyInt("09");
console.log(i.num); // 9
console.log(i.asString); // 09

请注意, int 0没有任何值。如果要用于显示目的,请使用字符串,对于计算部分,请使用 parseInt(someval)

答案 1 :(得分:1)

parseInt有两个参数:stringradix

radix告诉parseInt如何将字符串转换为数字。

如果您离开radixthe rules are somewhat simple for how it decides what radix to use

  

如果radix未定义或0(或不存在),则JavaScript假定以下内容:

     
      
  • 如果输入字符串以" 0x&#34开头;或" 0X",基数为16(十六进制),并解析字符串的其余部分。
  •   
  • 如果输入字符串以" 0"开头,则基数为八(八进制)或十进制(十进制)。
      究竟选择哪个基数是依赖于实现的。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能。 因此,在使用parseInt时始终指定基数。

  •   
  • 如果输入字符串以任何其他值开头,则基数为10(十进制)。

  •   

也就是说,您使用的是非缩写名称为" Parse Integer的函数。"你不能让它保留前导零,因为前导零没有数学价值。