2014-09-26 152 views
0

好日子,問題與.toFixed()導致

我仍然在學習JS和HTML,我發現了一些很有趣的,我

我使用谷歌地理編碼腳本,並在創建的單擊事件地圖檢索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

這個問題可以幫助你http://stackoverflow.com/questions/11832914/round-至多在2個小數點的位置在JavaScript – 2014-09-26 09:28:11

回答

1

該問題很可能是類型轉換和JavaScript的浮點數表示內置的組合。

當您撥打toFixed()時,您的號碼實際上會轉換爲具有所需小數位數的字符串。 google.maps.LatLng()需要兩個數字,但由於您沒有收到任何錯誤,所以也可以接收數字的字符串表示。

在內部,我假設google.maps.LatLng()再次將lat1lng1參數轉換爲數字。由於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; 
+0

這工作100%,並且實際上學會了我一些簡單的事情以備將來參考 – 2014-09-26 11:20:33