我正在编写一个需要随机 10 位数字的 JavaScript 程序,有时可以将第 10 位数字设置为 0。我为其中一个数字分配了一个变量,然后记录它以确保一切正常......但事实并非如此。这是我的代码:
var candidate = 0135740250;
var candidate2 = 0272189318;
console.log(candidate); // Returns 24625320
console.log(candidate2); // Returns 272189318
我尝试从candidate
开头取下0
,这使它正确返回,但我不明白为什么它首先不起作用。我在上面包括了candidate2
,因为无论我对它做什么,在中间添加0
,以其他方式更改它,它都保持正确,所以我无法弄清楚为什么candidate
被搞砸了。我模糊地理解Javascript中的数字存储系统,它并不完美,但我需要一种可预测的,可重复的方式来返回正确的数字。
问题是:这里发生了什么,我如何可靠地避免它?
"问题是:这里发生了什么......"
第一个是有效的八进制,因此它被转换为这样。
第二个不是有效的八进制,因为8
和9
,所以它得到基数 10 表示,前导0
被删除,因为它不增加任何值。
"...我怎样才能可靠地避免它?
避免它取决于您如何生成数字。如果您使用.random()
则不会成为问题,因此我认为它们来自某种字符串表示形式。
如果是这样,并且如果您使用 parseInt()
来获取实际数字,则将其作为第二个参数传递10
以确保以 10 为基数表示。
JavaScript 会将任何以 0 开头的数字视为八进制,如果它是有效的八进制。
另一个庸医是,如果你知道要生成的字符串的长度
"use strict"
var strlent = 10
console.log(candidate2.toString().length < strlent ? "0" +
candidate2.toString() : candidate2.toString())
>>>0272189318