gpt4 book ai didi

Javascript长整数

转载 作者:IT老高 更新时间:2023-10-28 12:46:11 25 4
gpt4 key购买 nike

我看到了 javascript 中最奇怪的东西之一。服务器端(spring):

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

我返回一个 long 值并且:

$.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 bits floating point numbers .这意味着您不能在 JavaScript 中表示所有 Java long。尾数的大小约为 53 位,这意味着您的数字 793548328091516928 不能完全表示为 JavaScript 数字。

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

关于Javascript长整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17320706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com