美好的一天,
我还在学习JS和HTML,我注意到了一些非常有趣的东西
我正在使用Google地理编码脚本并在地图上创建了一个点击事件来检索GPS坐标,
function onClickCallback(event){
var str = event.latLng.toString().slice(1,-1).split(',', 2);
var lat1 = parseFloat(str[0]).toFixed(5);
var lng1 = parseFloat(str[1]).toFixed(5);
var latlng1 = new google.maps.LatLng(lat1,lng1).toString().slice(1,-1);
document.getElementById('latlng').value = latlng1;
这完全符合我的需要,但出于某种奇怪的原因,第二部分" lng1"不会按预期向下舍入,例如,下面是结果
-25.3341,27.64984000000004或-25.34403,27.97393999999997
作为第一部分' lat1'工作正常第二部分的原因或原因是什么?lng1'不舍入,只显示前5位小数,如何修复
答案 0 :(得分:1)
问题很可能是类型转换和javascript内置浮点数表示的组合。
当您致电toFixed()
时,您的号码实际上会转换为具有所需小数位数的字符串。 google.maps.LatLng()
需要两个数字,但由于您没有收到任何错误,因此接收数字的字符串表示也很好。
在内部,我假设google.maps.LatLng()
再次将lat1
和lng1
参数转换为数字。由于javascript代表数字的方式通常会导致较小的舍入错误,toString()
会获得lng1
,现在又是一个数字,可能与toFixed()
最初返回的数字略有不同,并将其转换回来到一个字符串。
如果您希望能够输出不错的数字,可以推迟toFixed()
来电,直到结束:
...
var lat1Formatted = parseFloat(latlng1.split(', ')[0]).toFixed(5);
var lng1Formatted = parseFloat(latlng1.split(', ')[1]).toFixed(5);
document.getElementById('latlng').value = lat1Formatted + ', ' + lng1Formatted;