2016-04-13 4 views
1

Ich habe eine Anwendung mit Laravel 5.0 erstellt und lokal (innerhalb von Homestead) funktioniert alles wie erwartet.PHP Ambiguous Fließkomma Ausgabe

Wenn ich jedoch das Projekt bereitstellen, sind eine Reihe von Problemen offensichtlich. Eine davon beinhaltet Schwimmer.

Homestead ist PHP 5.6, während mein Server 5.5.9 ist. Wenn ich einen Preis auf meinem lokalen System anschaue, erscheint er korrekt als 9.99. Auf meinem Server wird es jedoch nicht korrekt angezeigt, sondern als 9.99000.

Mein Schema hat Preisfelder auf float (12,5) eingestellt, daher ist die zusätzliche rechte Auffüllung auch erforderlich.

Meine Frage ist einfach, was ist der Unterschied zwischen PHP 5.5 und 5.6 (oder sogar PDO/Eloquent), die ein Gleitkomma-Problem verursachen würde?

+0

Welcher Code ist für die Ausgabe dieser Werte verantwortlich? – Bogdan

+0

Es ist Standard eloquent. Wenn ich '{{$ product-> price}}' 'php 5.5 wird' 9.99000' anzeigen wo php 5.6 '9.99' anzeigt. – ash

+0

Ist die RDBMS-Version von Entwickler zu Entwickler unterschiedlich? – Bogdan

Antwort

2

Es gibt keinen Unterschied zwischen den PHP-Versionen, die dies verursachen würden. Es gibt jedoch Unterschiede zwischen verschiedenen mysql-Treibern, und das könnte das Problem verursachen, das Sie sehen.

Homestead kommt mit php5-mysqlnd installiert, das ist der "MySql Native Driver". Bei Verwendung dieses Treibers werden Fließkommazahlen und Ganzzahlen, die aus der Datenbank abgerufen werden, als numerische Datentypen in PHP zugewiesen. Wenn Sie nicht den nativen Treiber (php5-mysql) verwenden, werden Gleitkommazahlen und Ganzzahlen, die aus der Datenbank abgerufen werden, in PHP als Zeichenfolgen zugewiesen.

Der folgende Code zeigt, wie dies Ihr Ausgang beeinflusst: kann

$f = 9.99000; 
$s = "9.99000"; 

echo $f; // shows 9.99 
echo $s; // shows 9.99000 

Sie überprüfen, um zu sehen, ob der Server mit dem Befehl php -i | grep mysqlnd den nativen Treiber verwendet. Dies ist nur durch Ihre Suche nach phpinfo() für den nativen Treiber. Wenn dies nichts zurückgibt, verwenden Sie nicht den systemeigenen Treiber, und Ihre numerischen Daten werden als Zeichenfolgen zurückgegeben.

Wenn Sie nicht der native Treiber installiert haben, müssen Sie die alten Treiber entfernen und die neuen Treiber installieren:

apt-get remove php5-mysql 

apt-get install php5-mysqlnd 

Unter der Annahme, das Ihr Problem in erster Linie war, das es beheben. Sie können auch für weitere Informationen this question and answer auschecken.

+0

Wow, danke. Ich habe hier etwas Neues gelernt und danke für den Link. Ich wünschte, ich hätte das gefunden. – ash