我有一个代码,需要检查给定的秒数是否可以组成一年,但是如果传递了1秒的参数,该功能就会失效!
const isUpToYear = seconds => parseInt(seconds / 31536000) >= 1;
console.log(isUpToYear(311536000)); // true
console.log(isUpToYear(3600)); // false
console.log(isUpToYear(1)); // true!!
很明显,如果传入一秒钟,我需要该函数返回false。 我该如何解决?
答案 0 :(得分:1)
parseInt
旨在用于字符串。传递给parseInt
的第一个参数将转换为字符串if it isn't one already:
要解析的值。如果此参数不是字符串,则使用ToString抽象操作将其转换为一个参数。此参数中的前导空格将被忽略。
1 / 31536000
很小:3.1709791983764586e-8
。对此调用parseInt
导致将其转换为字符串('3.1709791983764586e-8'
),将其再次转换为数字会导致3
,这是可以理解的(因为3
是字符串中唯一的前导数字字符。
改为使用Math.floor
。
const isUpToYear = seconds => Math.floor(seconds / 31536000) >= 1;
console.log(isUpToYear(311536000)); // true
console.log(isUpToYear(3600)); // false
console.log(isUpToYear(1)); // true!!
答案 1 :(得分:0)
您可以在此处使用Math.floor()
代替parseInt()
。
当您有一个看起来像整数的字符串并且希望将其作为整数值时,parseInt()
函数将非常有用。问题在于浮点值被强制转换为"3.1709...e-8"
之类的字符串,而parseInt()
理解3
部分!