【问题标题】:Javascript, finding first significant figure (values ranging from 87.352 to 0.0002432)Javascript,找到第一个有效数字(值范围从 87.352 到 0.0002432)
【发布时间】:2014-12-12 19:12:03
【问题描述】:

我已经使用坐标创建了一个 GPS 系统。

我用这个函数找到了最高和最低的经纬度坐标:

var maxLng = 0;
var maxLat = 0;
  var minLng = 180;
  var minLat = 180;
  for(var i=0; i<coordinates.length; i++)
  {

    //get max coordinates (the +90 is to remove negative numbers)
    if (coordinates[i][0]+90 > maxLat)
    {
      maxLat = coordinates[i][0] + 90;
    }

    if (coordinates[i][1]+90 > maxLng)
    {
      maxLng = coordinates[i][1]+ 90;
    }

    //get min coordinates
    if (coordinates[i][0]+90 < minLat)
    {
      minLat = coordinates[i][0] + 90;
    }

    if (coordinates[i][1]+90 < minLng)
    {
      minLng = coordinates[i][1] + 90;
    }
  }

  console.log(maxLat, maxLng,minLat, minLng);

  //calculate distance between max and min points
  var lngDistance = maxLng - minLng;
  var latDistance = maxLat - minLat;

  console.log(lngDistance, latDistance);

这会输出两个最远的经度和纬度点之间的距离,然后我打算用它来创建一个基本的 2d 地图,如下所示:

我需要转换点,它们可以是一个值范围,例如:

0.0009321 19.332 1.9432123 0.0013432423 0.23432423 0.000034324

我想基本上将所有数字转换为小数点前 2 位有效数字,并将结果存储在数组中,说明我使用了多少班次。

我希望输出是这样的(原始数字、转换后的数字、使用的班次):

[0.0009321, 93.21, 4]
[19.332, 19.332, 0]
[1.9432123, 19.432123, 1]
[0.0013432423, 13.432423, 3]
...

我在想找到第一个有效数字,然后计算距离小数点有多远。我发现了一些关于使用 REGEX 来执行此操作的帖子,但我之前从未使用过 REGEX。

谁能指点一下?

干杯。

【问题讨论】:

  • 正则表达式是将数字转换为 2 位有效数字的错误工具
  • 嗯,好的,谢谢 nhahtdh,你能想到任何可以帮助我解决这个问题的工具吗?被它迷惑了好几个小时!
  • 您所拥有的示例的预期结果是什么? 0 19 2 0 0 0?还是 0.00093 19 1.9 0.0013 0.23 0.000034?
  • 我已经编辑了问题,以显示我想要输出的内容
  • 看看这个:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 使用后,我想你可以在e 处拆分并处理输出。

标签: javascript gps coordinates


【解决方案1】:

弄清楚这很有趣。

为你做了一个基本的功能,据我所知它可以工作。

function change(data){
    var ret=new Array();
    for(var i=0,len=data.length;i<len;i++){
        // make string from number, remove the dot
        var st=(''+data[i]).replace('.','');
        //remove leading zero's from string
        var no_zero=st.replace(/^0+/,'');
        //make value
        var val=parseInt(no_zero)/(Math.pow(10,no_zero.length-2));
        //calculate amount of steps
        var steps=Math.round(Math.log(Math.round(val/data[i]))/Math.log(10));

        //correction for floating point
        if(data[i]<0.01)steps--;

        ret.push([data[i],val,steps]);
    }
    return ret;
}

还有a working Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多