2017-06-02 69 views
0

我有一个JavaScript,它从用户移动设备收集经纬度并通过ajax发送到PHP脚本。由于变量有一个长小数点,我需要他们修剪下来,所以我可以将它们与我的数据库中每个位置的点集相比较。在IOS上使用chrome和opera可以很好地工作,它不会修剪变量,所以它总是对我的if语句显示负面影响。PHP substr不能在Safari IOS上工作

list($lat,$long) = 
explode(',',htmlentities(htmlspecialchars(strip_tags($_GET['latlng'])))); 
echo 'Latitude: '.$lat.' Longitude: '.$long.'<br />'; 
$_SESSION['clat'] = substr($lat,0,-5); 
$_SESSION['clong'] = substr($long,0,-4); 

echo 'Latitude: '.$_SESSION['clat'].' Longitude: '.$_SESSION['clong'].'<br 
/>'; 
if($_SESSION['lat'] == $_SESSION['clat'] && $_SESSION['long'] == 
$_SESSION['clong']) { 
echo "You are here"; 

所以$ lat和$长是从设备的原始值和$ _SESSION“CLAT”和“clong”都应该是这样修剪它们可以比在数据库(价值$ _SESSION ['LAT ']和long)

$ lat和$ _SESSION ['clat']在IOS设备上回显时相同。有没有原因,这不起作用?有其他选择吗?

+1

这不是PHP,但可能是您的客户端脚本,我建议将您的问题标题更改为更精确 – GIJOW

+0

'substr'不是PHP命令? – user2044644

回答

0

如果要将小数点数设置为特定数量,请使用round。下面将数字舍入到小数点后6分:

round($mynumber, 6); 

如果我使用1.234567890,我将获得1.234568(请注意,便将最后一个数字。)

或者,你可以恰当地比较十进制数。我不知道为什么要让程序员正确地做到这一点非常困难。假设我有两个十进制/浮点数/双精度数,我想看看它们是否相同。我采取绝对的差异,并将其与一定的准确度进行比较...

if(abs(a-b)<0.000001) // they are close enough to being the same 

你可以在查询中这样做吗?当然:

select * from sometable where abs(myfield-1.23456789)<0.00001 

我建议这样做是正确的,但你可以使用轮。我强烈建议不要使用substr来四舍五入数字。

+0

您的第二个解决方案适用于我,我从来没有想过这样做,但它似乎是一个更好的方式来完成我想要做的,谢谢! – user2044644