当使用Google API计算两个位置之间的距离时,它会以字符串格式返回距离。将距离字符串转换为数字
例如:1585 KM,54 KM等
我希望它被转换为数字。将1,525 KM等字符串转换为等数字的最佳方法是什么?利用parseInt
,.replace()
与RegExp
/[^\d+]/
更换不属于输入文本中的数字字符
当使用Google API计算两个位置之间的距离时,它会以字符串格式返回距离。将距离字符串转换为数字
例如:1585 KM,54 KM等
我希望它被转换为数字。将1,525 KM等字符串转换为等数字的最佳方法是什么?利用parseInt
,.replace()
与RegExp
/[^\d+]/
更换不属于输入文本中的数字字符
如果您使用的是Google Maps Distance Matrix API,有在distance
对象的另一场称为value
,它有一个数值。如API中所记录的,单位是米。
但是,为了回答你原来的问题,我会删除从字符串使用正则表达式的所有非数字字符:
var dist = '1,525 KM';
dist = Number(dist.replace(/[^\d]/g, ''));
尝试
var text = "1,525 KM";
var n = parseInt(text.replace(/[^\d+]/g, ""));
console.log(n);
'变种文字= “1234567890 KM”;''输出1234' – MT0
@ MT0见更新的帖子;将'g'标志添加到'RegExp' – guest271314
强烈建议您使用距离value
,而不是文字。因为它也可以是.
格式,例如1.525 KM
。
因此为@rink说使用价值,这将是永远meters
,你可以按我的意见
valueInKm = value * 0.001
将其转换到你的格式,它是一个更清洁的解决方案,如果你可以使用,
或.
作为小数标记,你可以有小数点,那么你可以使用这样的事情在格式{ 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);
当它是'1,524.2 KM'(使用','作为小数点和'.'作为小数点)或'1.524,2 KM'(使用'.'小数点和','作为小数点)? – MT0