gpt4 book ai didi

javascript - .toFixed() 结果存在问题

转载 作者:行者123 更新时间:2023-12-03 11:45:47 26 4
gpt4 key购买 nike

美好的一天,

我仍在学习 JS 和 HTML,我注意到一些对我来说非常有趣的事情

我正在使用 Google 地理编码脚本,并在 map 上创建了一个点击事件来检索 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 位小数的原因是什么,以及如何修复它

最佳答案

问题很可能是类型转换和 JavaScript 内置 float 表示的组合。

当您调用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;

关于javascript - .toFixed() 结果存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26056177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com