【问题标题】:Why javascript parseInt ignoring leading zeros in the string? [duplicate]为什么javascript parseInt忽略字符串中的前导零? [复制]
【发布时间】:2016-05-16 06:56:23
【问题描述】:

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

parseInt('09') //returns 9 always

获得前导零的数字的最佳方法是什么,如果有人解释一下为什么设计的 parseInt 不关心前导零,那就更好了。

【问题讨论】:

  • parseInt() 返回一个数字。数学上的前导零没有意义,因此 9 = 09 = 009 = 9.0000 等。如果要保留前导零,则需要将其保留为字符串。
  • 简单,09 等于 9 被视为数字。
  • 您还希望获得什么其他数字?
  • 您能解释一下您要做什么吗?也许 parseInt 不是您想要的,如果它是填充问题,您可以随时将数字格式化为具有前导零。

标签: javascript


【解决方案1】:

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

为了存储数字,语言使用二进制表示(不要忘记最后一切都是 0 和 1)。这种表示形式与 9、09 或 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

请注意,前导 0 对 int 没有任何价值。如果想用于显示目的使用 string 和计算部分使用 parseInt(someval)

【讨论】:

  • 没错,如果你想用前导零显示,请将其转换为字符串并在控制器末尾添加前导零。
【解决方案2】:

parseInt 有两个参数:stringradix

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

如果您将radix 排除在外,the rules are somewhat simple for how it decides what radix to use

如果 radix 未定义或为 0(或不存在),JavaScript 假定如下:

  • 如果输入字符串以“0x”或“0X”开头,则基数为 16(十六进制)并解析字符串的其余部分。
  • 如果输入字符串以“0”开头,则基数为 8(八进制)或 10(十进制)。
    确切选择哪个基数取决于实现。 ECMAScript 5 指定使用 10(十进制),但并非所有浏览器都支持这一点。 因此,在使用 parseInt 时始终指定一个基数。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-05
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多