我有一个代码需要检查给定的秒数是否可以组成一年,但是当传递1秒的参数时,该功能无效!
const isUpToYear = seconds => parseInt(seconds / 31536000) >= 1;
console.log(isUpToYear(311536000)); // true
console.log(isUpToYear(3600)); // false
console.log(isUpToYear(1)); // true!!
显然,如果传入一秒钟,我需要该函数返回false。
我该如何解决?
最佳答案
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!!