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

时间:2016-09-24 21:28:09

标签: javascript

我有一个API用于生成带有Erlang服务器的随机地图tileset,安全整数JavaScript可以请求API良好,但问题是何时超过var express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var app = express(); //Allow all requests from all domains & localhost app.all('/*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "POST, GET"); next(); }); app.use(express.static(path.join(__dirname + '/public'))); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); var persons = [ "person1.jpg", "person2.jpg", "person3.jpg", "person4.jpg", "person5.jpg", "person6.png" ]; app.get('/persons', function(req, res) { console.log("GET From SERVER"); res.send(persons); }); app.listen(6069);

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

如何在JavaScript中获取类似999999999999999999999的字符串,以便发送到API,而不是科学记数字符串?在JavaScript中存在一个任意长数字的库只有这个数字?棕色是一个X和Y的位置并且需要正确的位置,并且不是一个好的大型库因为需要良好的性能来渲染地图的ms,是用于浏览器中的游戏,而不是用于天文计算。

3 个答案:

答案 0 :(得分:2)

您可以使用BigNumber库(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

答案 1 :(得分:1)

在这种情况下,问题的一个可能的解决方案是不向服务器发送新位置,并且只发送一个移动事件,然后Erlang中的服务器可以用任意长数来计算新位置(同时已经为非常大的内存计算了内存)数字),并没有JavaScript中的问题。

答案 2 :(得分:0)

使用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);