如何在不转换为Javascript浮点的情况下将大数除以1

时间:2019-08-20 02:25:20

标签: javascript floating-point

我有一个代码,需要检查给定的秒数是否可以组成一年,但是如果传递了1秒的参数,该功能就会失效!

const isUpToYear = seconds => parseInt(seconds / 31536000) >= 1;

console.log(isUpToYear(311536000));  // true
console.log(isUpToYear(3600));  // false
console.log(isUpToYear(1));    // true!!

很明显,如果传入一秒钟,我需要该函数返回false。 我该如何解决?

2 个答案:

答案 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部分!