JavaScript舍入函数中的硬编码8191 10485值

Mat*_*rty 6 javascript magic-numbers rounding

我在一些遗留代码中看到了以下(奇怪的)Javascript舍入函数.谷歌搜索后,我可以看到它在网上很多地方出现.但是我无法弄清楚为什么存在硬编码值8191和10485.

有谁知道为什么这些价值被包括在内有任何合理的理由?如果没有,希望我们可以杀死模因!

function roundNumber(num,dec) {
    var newnumber = 0;
    if (num > 8191 && num < 10485) {
        num = num-5000;
        newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
        newnumber = newnumber+5000;
    } else {
        newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    }
    return newnumber;
}
Run Code Online (Sandbox Code Playgroud)

tad*_*man 2

8191 (0x1fff) 在二进制表示方面可能很重要,但 10485 (0x28f5) 似乎并不重要。

我敢打赌这是某种解决浮点舍入错误的黑客方法。浮点数可能以不可预测的方式起作用,例如,您期望 2 但得到 1.99999999973904,并且 >= 2 等比较会失败。