MDN示例(Math.random()):它可能是parseInt()而不是Math.floor()吗?

时间:2015-08-16 19:53:10

标签: javascript math random

当我偶然发现Math.random()的这个例子时,我正在阅读JavaScript教程并在MDN网站上搜索功能:

function getRandomIntInclusive(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

虽然我知道Math.floor选择了最大的数字并且删除了所有具有小数值的数字,但我已经学习了另一个名为parseInt()的函数,它只删除了所有数字。那么,这两者之间的区别是什么?我不能用

function getRandomInclusive(min, max) {
return parseInt(Math.random() * (max - min + 1)) + min;
}

代替? 我在写Math.floor()可能写的问题时得到了一个想法,当它是4,5而parseInt()会写4时,但它对于随机数生成器并不重要明白(如果你知道什么时候重要的例子,请告诉我!)那么,在这种情况下仍然没有太大区别?

3 个答案:

答案 0 :(得分:3)

parseInt字符串解析为整数,只读取该字符串开头的数字。使用将数字舍入为整数是不合适的。该数字将首先转换为字符串,有时会产生意外结果:

var num = 1000000000000000000000;
parseInt(num) // 1, because the string representation is 1e+21
  

我在写这个问题的时候有了想法,Math.floor()可能会写出5,当它的4,5和parseInt()会写4时

您正在考虑舍入到最接近的整数,这是Math.round所做的。 Math.floor总是向下舍入。

答案 1 :(得分:0)

这是一个他们的行为大不相同的例子:负数。

Math.floor(-2.5) -> -3
parseInt(-2.5) -> -2

然而,其他答案中指出的语义差异可能更为重要。即使它确实适用于您的特定和特定用例,最好选择具有正确语义的那个。 (还有无数其他方法可以从函数中返回一个看似随机的整数,你应该选择最不可能使你的代码难以维护的那个。)

答案 2 :(得分:0)

明显的区别在于Math.floor是一个适用于数字的函数,而parseInt是一个带字符串的函数。当我们处理随机数字时,你不想在这里使用后者。

如果您不确定舍入模式,请比较Math.floorMath.roundMath.ceil