将距离字符串转换为数字

时间:2015-06-14 07:55:52

标签: javascript parsing

使用Google API计算两个位置之间的距离时,会以字符串格式返回距离。

例如:1,585公里,54公里等。

我希望将其转换为数字。将 1,525 KM 这样的字符串转换为 1525 这样的数字的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

如果您使用的是Google Maps Distance Matrix API,则distance对象中有另一个名为value的字段,其中包含一个数字值。如API中所述,单位为米。

但是要回答你的原始问题,我会使用正则表达式从字符串中删除所有非数字字符:

var dist = '1,525 KM';
dist = Number(dist.replace(/[^\d]/g, ''));

答案 1 :(得分:2)

强烈建议使用距离value代替文字。因为它也可以是.格式,例如1.525 KM

因此,@rink表示使用值始终位于meters,您可以根据我的意见将其转换为您的格式,这是一个更清晰的解决方案

valueInKm = value * 0.001

答案 2 :(得分:1)

如果您可以使用,.作为小数点,并且您可以使用小数点,那么您可以使用类似的内容返回{ value: Number, units: String }格式的结构:

function getDistance( dist ){
  var match = /^([+-]?[1-9]\d{0,2}(?:(?:([,.])(?:\d{3}\2)*\d{3}(?:(?!\2)[,.]\d+)?)|[,.]\d+)?|[+-]?0(?:[,.]\d+)?) (.+)$/
    .exec( dist );
  if ( match ){
     return {
       value: parseFloat( match[1].split( match[2] ).join( '' ).replace( ',', '.' ), 10 ),
       units: match[3]
     };
  }
  return { value: null, units: null };
}

<强>测试

var results = [
  { in: "0 m", dist: 0, units: "m" },
  { in: "10 m", dist: 10, units: "m" },
  { in: "0.2 m", dist: 0.2, units: "m" },
  { in: "0,2 m", dist: 0.2, units: "m" },
  { in: "1,202 m", dist: 1202, units: "m" },
  { in: "1,524.2 KM", dist: 1524.2, units: "KM" },
  { in: "1.524,2 KM", dist: 1524.2, units: "KM" },
  { in: "9,234,524.2 KM", dist: 9234524.2, units: "KM" },
  { in: "9.234.524,2 KM", dist: 9234524.2, units: "KM" },
];

var successes = 0;
for ( var i = 0; i < results.length; i++ ){
  var v = getDistance( results[i].in );
  if ( v.value == results[i].dist && v.units == results[i].units )
    successes++
  else
    console.log( results[i].in, v.value, v.units );
}
console.log( "Successes:", successes, "Failures:", results.length - successes );

答案 3 :(得分:0)

尝试使用parseInt.replace()RegExp /[^\d+]/来替换输入文本中不是数字的字符

var text = "1,525 KM";

var n = parseInt(text.replace(/[^\d+]/g, ""));

console.log(n);