使用Google API计算两个位置之间的距离时,会以字符串格式返回距离。
例如:1,585公里,54公里等。
我希望将其转换为数字。将 1,525 KM 这样的字符串转换为 1525 这样的数字的最佳方法是什么?
答案 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);