为什么 (00123 + 34351) return 34434 在 java 脚本、java 和 python 中?正确答案是 34474

why does (00123 + 34351) return 34434 in javascript, java and python ? The correct answer is 34474

console.log(00123 + 34351); //in javascript, outputs 34434
print(00123 + 34351); //in python, outputs 34434

在 javascript 中,输出 34434 在 python 中,输出 34434

然而,删除前导零即 (123 + 34351) 给出了正确答案,即 34474

不确定Java,但在Java脚本和Python2中,以0开头的数字是八进制数,即00123是实际上 83 十进制。

Java脚本: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Numeric_literals

0是八进制的常用前缀,其十进制数为83。做

console.log(00123+34351)

等同于

console.log(83+34351)

编辑:请注意,在 python 3+ 中,前缀是 0o

不,正确答案确实是 34434(以 10 为基数)。在许多语言中以 0 开头的数字是八进制的,因此您的加法运算是 123(以 8 为底)+ 34351(以 10 为底)。将八进制整数转换为十进制,你就会明白其中的道理了。