JavaScript将科学记数法中的不安全整数转换为字符串

JavaScript convert not safe integer in scientific notation to string

本文关键字:不安全 整数 转换 字符串 JavaScript      更新时间:2023-09-26

我有一个API生成一个随机地图块集与Erlang服务器,安全的整数JavaScript可以请求API好,但问题是什么时候是超过Number.MAX_SAFE_INTEGER

然后,在服务器中我没有整数,因为JavaScript以科学记数法发送1e+21,而不是999999999999999999999,我需要像字符串一样的数字,而不是科学记数法。

我怎么能得到一个字符串像"999999999999999999999"在JavaScript发送到API,而不是科学符号字符串?存在一个库的任意长数字在JavaScript小只为数字?数字是X和Y的位置,需要正确的位置,而不是一个大的库,因为需要良好的性能,以毫秒渲染地图,是一个游戏在浏览器,而不是天文计算。

您可以使用bignnumber库(https://github.com/MikeMcl/bignumber.js/)。

这两行就可以了:

BigNumber.config({EXPONENTIAL_AT: [-10, 30]});
var stringifiedLongNumber = new BigNumber('999999999999999999999').toString();

EXPONENTIAL_AT配置参数文档:http://mikemcl.github.io/bignumber.js/#exponential-at

在这种情况下,一个可能的解决方案是不向服务器发送新的位置,而只发送一个移动事件,然后Erlang中的服务器可以计算任意长数字的新位置(同时有足够的内存来处理一个非常大的数字),而不会在JavaScript中出现问题。

也许使用asm.js优化的小解决方案更好,并使用字符串添加和休息的数字,这是一个简单的例子,但可能做得更好:

var a = "999999";
var b = "";
var acarreo = 1|0;
console.log(a);
for(var i=a.length-1|0; i >= 0; i--){
    var j = parseInt(a[i])|0;
    var j = j + acarreo|0;
    if(j > 9){
        j-=10|0;
        acarreo=1|0;
    }else{
        acarreo=0|0;
    }
    b = j.toString() + b;
}
if(acarreo>0){
    a = acarreo.toString() + b;
}else{
    a = b;
}
console.log(a);