【发布时间】:2021-01-23 22:06:09
【问题描述】:
JavaScript 具有由Number.MAX_SAFE_INTEGER 定义的a limitation in integer precision。超出此范围的任何数字都有不准确的风险。这是因为位移动导致无法在内存中准确表示as outlined in this answer:
var max = Number.MAX_SAFE_INTEGER;
max + 0; // 9,007,199,254,740,991
max + 1; // 9,007,199,254,740,992
max + 2; // 9,007,199,254,740,992 (!)
max + 3; // 9,007,199,254,740,994
max + 4; // 9,007,199,254,740,996 (!)
// ...
任何高于max 的结果都非常不可靠,几乎完全没用,如果开发人员没有预料到或没有意识到这个限制,很容易导致错误。
我的问题是,超过这个值的数字有什么意义? JavaScript 是否有任何实际用途以允许 Number 超出此范围?可以达到Number.MAX_VALUE(1.79e+308),比MAX_SAFE_INTEGER大很多,但是这两个值之间的一切都不是很有用,它迫使开发者切换到BigInt。
【问题讨论】:
-
你真的需要 15位的精度吗?
-
因为 JavaScript 使用单一类型来表示整数和浮点数。所以可能存在超过该大小的安全双精度浮点数
标签: javascript