2017-06-02 158 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