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