Javascript long integer

Javascript long integer

本文关键字:integer long Javascript      更新时间:2023-09-26

我看到了javascript中最奇怪的事情之一。服务器端(弹簧):

   @RequestMapping(value = "/foo", method = RequestMethod.GET)
   @ResponseBody
   public Long foo() {
      return 793548328091516928L;
   }

我返回一个长值和:

$.get('/foo').done(function(data){
    console.log(data);
});

它将长整数表示为"793548328091516900",将最后两位数字(实际上是四舍五入)替换为0。当我从任何浏览器的地址栏发出GET请求时,正确表示的数字;因此,在我看来,这是一个js问题。

从服务器返回字符串而不是长字符串,并使用进行处理

var x = new Number(data).toFixed();

显然是一个解决方案。但我没有那么幸运,我必须处理一个复杂的POJO(转换为JSON),它的一些字段(有些是嵌套的)是用java.lang.Long类型键入的。如果我试图将这个POJO强制转换为另一个没有字段类型为Long的对象,这显然很麻烦。

有没有以更明确的方式解决这一障碍?

在Java中,您有64位整数,这就是您所使用的。

在JavaScript中,所有数字都是64位浮点数字。这意味着您不能用JavaScript表示所有的Java长度。尾数的大小约为53位,这意味着您的数字793548328091516928不能准确地表示为JavaScript数字。

如果你真的需要处理这样的数字,你必须用另一种方式来表示它们。这可以是字符串,也可以是像数字数组这样的特定表示形式。一些"大数字"库在JavaScript中可用。

可能会迟到,但肯定会帮助其他第一次遇到这种情况的人。

我也想用JavaScript计算一些大数字。有很多图书馆可以处理这样的数字。但他们中的大多数人可能会浪费你很多时间。在这里https://github.com/peterolson/BigInteger.js,是一个直接、完整(适用于非节点环境和节点JS环境)且可工作的解决方案,适用于大量可用的所有操作。或者找到以下简单的示例工作HTML代码片段,它计算模/余数,

<script src="http://peterolson.github.com/BigInteger.js/BigInteger.min.js"></script>
<script type="text/javascript">
    function modTest(){
       var rem = bigInt("1738141852226360940").mod("32").valueOf();
       console.log(rem);
       document.getElementById("remainder").innerHTML = rem;
    }
</script>
<BODY onload="modTest();">
    <p id="remainder"></p>
</BODY>

您可以使用长npm包。

它可以让您在JavaScript中拥有64 bits integers

您还可以使用BigInt JavaScript内置方法。