【问题标题】:Why does 0154 === 108? [duplicate]为什么 0154 === 108? [复制]
【发布时间】:2011-06-27 09:58:53
【问题描述】:

here 发生了什么,为什么?

document.write(0154); // === 108

【问题讨论】:

标签: javascript html


【解决方案1】:

以 0 开头的数字被视为八进制(base-8)数字。

基数 8 [0154] = 基数 10 [108]

但如果你使用的是一个有 8 或 9 的数字,你就不会看到这个问题,因为 8 和 9 都不是八进制数字。

【讨论】:

  • 哇,简直不敢相信我竟然没有想到这一点。谢谢你的解释!
  • 发明这种行为的人应该远离任何计算机。
  • @GolezTrol 为什么?在许多不同的情况下,它是一个被广泛接受的结构:)
  • @pst:因为这种行为在 Javascript 中的唯一实际影响是导致编程错误。
  • 它被广泛接受是因为有人在 1872 年的一个醉酒的星期天下午发明了它,现在没有人记得,但在很多情况下,前导零被忽略了。前缀 0o 或某些东西会更有意义,因为您可以立即看到该数字的特殊之处,即使您仍然需要查找 'o' 代表什么。
【解决方案2】:

0154 是八进制。 1*64 + 5*8 + 4 = 108。

【讨论】:

    【解决方案3】:

    它的八进制数。 八进制=0154 & 十进制=108

    【讨论】:

      【解决方案4】:

      因为它以 0 开头,所以它正在打印出你所写内容的八进制等价物。试试 0001(打印出 1)、0010(打印出 8)、0011(打印出 9)

      【讨论】:

        猜你喜欢
        • 2010-09-11
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 2016-04-22
        • 2017-05-29
        • 1970-01-01
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多