在我的javaScript程序中,我测试以下代码。
输入:$decodeURIComponent(598697613166239744)
输出:598697613166239700
为什么号码改变了?我怎么能避免它?
答案 0 :(得分:2)
这是Javascript中的一般主张。您的号码(598697613166239744)高于JavaScript可以表示的最高安全整数,因为其Double-precision floating-point format。
安全意味着可以准确,正确地表示它。计算的数字越大,估计值越高。因此,他们通常在正确的社区,但不完全。
您可以通过运行
来验证这一点console.log(598697613166239744)
console.log( Number.MAX_SAFE_INTEGER )
所以问题不是decodeURIComponent()
。
要解决此问题,请将此数字打包成字符串或使用可处理此类数字的库
答案 1 :(得分:0)
请忽略该小提琴中的HTML
部分。我在加载库时遇到了一些问题,所以最后我把代码转储到HTML
部分。
以下是SO评估的操作代码:
var uriComponent = "598697613166239744";
var d = new Decimal(uriComponent);
document.body.innerHTML += "<p>uriComponent: "+ uriComponent + "</p>";
document.body.innerHTML += "<p>parseInt will be wrong: "+ parseInt(uriComponent, 10) + "</p>";
document.body.innerHTML += "<p>Decimal solution: "+ d.toString() + "</p><br>";
document.body.innerHTML += "<p>Decimal operation (divide by 2): "+ d.div(2).toString() + "</p>";
document.body.innerHTML += "<p>Decimal operation (multiply by 2): "+ d.mul(2).toString() + "</p>";
document.body.innerHTML += "<p>Decimal operation (modulus by 2): "+ d.mod(2).toString() + "</p>";