Frage

Ich versuche, eine 64-Bit-Integer-Hardcoded in einer String-Variablen zu verwenden.

Simplfied Ich möchte so etwas wie dies tun:

$i = 76561197961384956;
$s = "i = $i";

Was in s Wesen führen soll:

i = 76561197961384956

Dies ist offensichtlich nicht wie PHP große ganze Zahlen werfen zu schweben, also s ist:

i = 7.65611979614E+16

Während mehrere andere Methoden wie Gießen usw. scheitern, fand ich number_format() und verwenden Sie es wie folgt aus:

$s = "i = " . number_format($i, 0, '.', '');

Aber diese Ergebnisse in s Wesen:

i = 76561197961384960

Sieht aus wie ein Approximationsproblem, aber wie dieses Problem beheben?

War es hilfreich?

Lösung

Sie verlieren die Präzision auf der Zuordnung, nicht auf der String-Konvertierung. Wenn dieser Wert der Variablen tatsächlich fest einprogrammiert ist, und Sie können das nicht ändern, gibt es nichts, was Sie tun können.

Eine Zeile wie:

$i = 76561197961384956;

wird immer Präzision verlieren. Wenn Sie die ganze Sache halten müssen, bewahren Sie sie in einen String, können Sie nicht speichern Sie es als int so und alle Ziffern halten.

Andere Tipps

Ich glaube, der einzige Weg, um die bcmath Funktionen zu verwenden ist .

  

Für beliebig genaue mathematische PHP bietet die Binary Calculator, die Zahlen von beliebiger Länge und Genauigkeit, die als String dargestellt.

Es ist Ihr $i, was falsch ist, nicht die String-Konvertierung - PHP 32 Bit ints intern verwendet,

.

für Art und Weise jetzt nur große Integer-Operationen in PHP zu tun ist, bcmath oder gmp-Erweiterungen zu verwenden, die großen Zahlen als Strings verarbeiten. 64-Bit-Integer in php6 geplant.

so, wenn große Zahlen mit warf sie in einem String oder Sie Präzision verlieren auf Zuweisen (automatischen Gusses zu schweben) und dann auf den String-Mathematikbibliotheken benutzen, um Ihre Zahl weiter zu verarbeiten.

Haben Sie versucht, die intval () Funktion des PHP?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top