2017-06-02 10 views
0

Ich habe ein Javascript, das Breite und Länge von einem mobilen Gerät des Benutzers sammelt und an ein PHP-Skript über Ajax sendet. Da die Variablen einen langen Dezimalpunkt haben, brauche ich sie getrimmt, damit ich sie mit den Punkten in meiner Datenbank für jeden Ort vergleichen kann. Funktioniert gut auf Android mit Chrom und Opera auf IOS es trimmt die Variablen überhaupt nicht, so dass es immer ein negatives auf meine if-Anweisung zeigt.PHP-Substr funktioniert nicht auf 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"; 

So $ lat und sind $ lang die Rohwerte aus dem Gerät und $ _SESSION ‚clat‘ und ‚clong‘ sollen beschnitten werden, damit sie auf Werte in der Datenbank verglichen werden ($ _SESSION [ 'lat '] und lang)

$ lat und $ _SESSION [' clat '] sind die gleichen, wenn auf IOS-Gerät echod. Gibt es einen Grund, warum das nicht funktioniert? Gibt es eine Alternative?

+1

Dies ist nicht PHP, aber wahrscheinlich Ihr Client-Skript, würde ich vorschlagen, Ihre Frage Titel zu präzisieren – GIJOW

+0

Wie ist 'substr' nicht ein PHP-Befehl ?? – user2044644

Antwort

0

Wenn die Anzahl der Dezimalpunkte auf einen bestimmten Wert eingestellt werden soll, verwenden Sie round. Im Folgenden wird eine Nummer 6 Dezimalstellen abzurunden:

round($mynumber, 6); 

Wenn ich 1,234567890 verwenden, ich 1,234568 bekommen (Beachten Sie, dass es die letzte Ziffer rundet.)

Alternativ können Sie Dezimalzahlen richtig vergleichen. Ich weiß nicht, warum es so schwer ist, Programmierer zu lehren, es richtig zu machen. Angenommen, ich habe zwei Dezimal/Float/Double-Zahlen und ich möchte sehen, ob sie gleich sind. Ich nehme die absolute Differenz und vergleichen Sie es mit einem gewissen Grad an Genauigkeit ...

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

Können Sie tun, dass in einer Abfrage? Sicher:

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

Ich schlage vor, es richtig zu machen, aber Sie können Runde verwenden. Ich rate dringend, substr nicht zu verwenden, um Zahlen zu runden.

+0

Ihre zweite Lösung funktionierte für mich, ich hätte nie gedacht, dass es so geht, aber es scheint ein besserer Weg zu sein, um das zu erreichen, was ich zu tun versuche, Danke! – user2044644

Verwandte Themen