当前位置: 首页 > 面试题库 >

Javascript长整数

包丁雨
2023-03-14
问题内容

我已经看到了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问题。

从服务器返回一个字符串而不是long并使用以下命令处理它:

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

显然是一个解决方案。但是我不是很幸运,我必须处理一个复杂的POJO(转换为JSON),其某些字段(有些是嵌套的)是用java.lang.Longtype键入的。如果我尝试将此POJO强制转换为另一个没有输入Long的字段的对象,则显然很麻烦。

有没有更清楚地解决这一障碍的办法?


问题答案:

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

在JavaScript中,所有数字均为64位浮点数。这意味着您不能在JavaScript中表示所有Java
long。尾数的大小约为53位,这意味着您的数字793548328091516928不能完全表示为JavaScript数字。

如果您确实需要处理此类数字,则必须以另一种方式表示它们。这可以是字符串,也可以是特定的表示形式,例如数字数组。JavaScript中提供了一些“大数字”库。



 类似资料:
  • 问题内容: 我需要解析一个包含一个长数字的json(在Java servlet中产生)。问题在于长整数会四舍五入。 执行此代码时: 输出为: 在此处查看示例:http : //jsfiddle.net/huqUh/ 为什么会这样,我该如何解决呢? 问题答案: 正如其他人所说,这是因为数量太大。但是,可以通过将数字作为字符串发送来解决此限制,如下所示: 然后,您可以使用javascript-bign

  • 这是一个至少为64 bit的整数类型(译注:实际宽度依赖于具体的实现平台),例如: long long x = 9223372036854775807LL; 不过,不要想当然地认为存在long long long或者将long拼写为short long long。 (译注:如同J. Stephen Adamczyk在参考文献中所言,”long long”是一个晦涩的拼写64-bit整数类型的方式

  • 问题内容: 如果我想对整数进行位操作,如何将其加载到?中?如何将其转换回int或long?我不太担心它的大小,它总是32或64位长。我只是想使用,,,和方法,而不是位运算符,但我无法找到一个简单的方法来初始化位集以数字类型。 问题答案: 以下代码从一个长值创建一个位集,反之亦然: 编辑:现在两个方向,@leftbrain:原因,你是对的

  • 我想做一些长整数数学(128位)与英特尔I64汇编和需要创建一个2的补充。假设我的正值在RDX:RAX中。 2的补码是通过“翻转位并加1”来完成的。所以最简单的实现是(4条指令和14字节的代码): 还是4个指令。但是我可以减去-1,而不是加+1,因为SBB将进位加到了减数,所以当进位是清晰的时,我会加+1。所以我下一个最好的尝试是,用3条指令和10字节的代码: 正如你可以从我冗长的文本中看到的,这

  • 我正在使用Hibernate4.2和PostgreSQL。 我有这张表在邮局: 而我的实体是: 当我编写实体时,我将id设置为整数,但是,我从int改为Long,并开始出现以下错误: 谢谢:)

  • 2.2.2 长整数类型 long 如果在计算过程中出现超出 int 范围的整数怎么办?我们来看一个例子: >>> 123456789 * 10 1234567890 >>> 123456789 * 18 2222222202L 注意观察第二个表达式的结果——2222222202 的后面有个“L”。我们对此解释如下:第 一个表达式的计算没有问题,因为 1234567890 处于 int 类型范围之