如何使用javascript解码uri中的大数字

时间:2017-02-15 08:21:33

标签: javascript json urldecode

在我的javaScript程序中,我测试以下代码。 输入:$decodeURIComponent(598697613166239744)

输出:598697613166239700

为什么号码改变了?我怎么能避免它?

2 个答案:

答案 0 :(得分:2)

这是Javascript中的一般主张。您的号码(598697613166239744)高于JavaScript可以表示的最高安全整数,因为其Double-precision floating-point format

安全意味着可以准确,正确地表示它。计算的数字越大,估计值越高。因此,他们通常在正确的社区,但不完全。

您可以通过运行

来验证这一点
console.log(598697613166239744)
console.log( Number.MAX_SAFE_INTEGER )

所以问题不是decodeURIComponent()

要解决此问题,请将此数字打包成字符串或使用可处理此类数字的库

答案 1 :(得分:0)

  1. 以字符串
  2. 获取组件
  3. 在该字符串上创建一个Decimal.js实例
  4. 使用Decimal.js方法,您现在可以操作这个庞大的数字。
  5. http://jenkins

    请忽略该小提琴中的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>";