Aktueller Standort: Startseite> Neueste Artikel> Wie vermeiden Sie den Genauigkeitsverlust während der Konvertierung bei der Verwendung von Bindenfunktion?

Wie vermeiden Sie den Genauigkeitsverlust während der Konvertierung bei der Verwendung von Bindenfunktion?

gitbox 2025-09-17
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Dieser Teil hat nichts mit dem Inhalt des Artikels zu tun,Sie können einen Testcode oder Platzhalterinhalte einfügen</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Willkommen, um diesen Artikel zu lesen\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"------------------\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

---

</span><span><span class="hljs-comment"># verwenden bindec Funktionszeit,Wie man einen Genauigkeitsverlust während der Konvertierung vermeidet?</span></span><span>

existieren PHP Mitte,`bindec` Funktionen können binäre Zeichenfolgen in Dezimalzahlen umwandeln。Zum Beispiel:

```php
</span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-string">"1101"</span></span><span>;
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-variable">$binary</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decimal</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe 13</span></span><span>
</span></span>

Obwohl BindEc im Umgang mit kurzen Binärzahlen sehr bequem ist, können Sie Probleme mit Präzisionsverlust bei größeren Binärzahlen haben. Dies liegt daran, dass der Ganzzahl- und Schwimmpunkt -Typ von PHP bei intern gespeicherten Größenbeschränkungen aufweist. Normalerweise beträgt der Maximalwert von PHP-Ganzzahlen auf 64-Bit-Systemen 9223372036854775807. Der Überschreiten dieses Bereichs wird automatisch in schwimmende Punktzahlen umgewandelt, was zu einem Genauigkeitsverlust führt.

Methoden zur Vermeidung des Genauigkeitsverlusts

1. Verwenden Sie GMP -Erweiterungen

GMP (GNU Multiple Precision) liefert hochpräzise Ganzzahlberechnungen, die sicher binäre Zeichenfolgen jeder Länge verarbeiten können:

 <span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-string">"110110101010101010101010101010101010"</span></span><span>;
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gmp_init</span></span><span>(</span><span><span class="hljs-variable">$binary</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Binär in GMP Objekt</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">gmp_strval</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span><span>);       </span><span><span class="hljs-comment">// Ausgabe十进制字符串</span></span><span>
</span></span>

Auf diese Weise geht auch wenn die Binärzahl sehr groß ist, die Genauigkeit nicht verloren.

2. Verwenden Sie die BCMATH -Erweiterung

BCMATH liefert hochpräzise Zeichenfolgen numerische Berechnungen, die auch zur Verarbeitung großer Binärzahlen verwendet werden können:

 <span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-string">"110110101010101010101010101010101010"</span></span><span>;

</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-string">'0'</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$binary</span></span><span>);

</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$length</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$binary</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>] === </span><span><span class="hljs-string">'1'</span></span><span>) {
        </span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bcadd</span></span><span>(</span><span><span class="hljs-variable">$decimal</span></span><span>, </span><span><span class="hljs-title function_ invoke__">bcpow</span></span><span>(</span><span><span class="hljs-string">'2'</span></span><span>, (</span><span><span class="hljs-keyword">string</span></span><span>)(</span><span><span class="hljs-variable">$length</span></span><span> - </span><span><span class="hljs-variable">$i</span></span><span> - </span><span><span class="hljs-number">1</span></span><span>)));
    }
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decimal</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe十进制字符串</span></span><span>
</span></span>

Obwohl BCMath nicht so direkt wie GMP ist, kann es auch ohne GMP -Erweiterungen verwendet werden.

3. Zusammenfassung

  • Für kleine Binärzahlen reicht es aus, Bindec direkt zu verwenden.

  • Für große Binärzahlen oder Berechnungen mit hoher Präzision wird empfohlen, GMP- oder BCMATH-Erweiterungen zu verwenden.

  • Vermeiden Sie es, sich auf schwimmende Punktzahlen zu verlassen, um große Ganzzahlen zu speichern, um den Genauigkeitsverlust zu verhindern.

Mit der obigen Methode können Sie binäre Zeichenfolgen in PHP sicher in Dezimalzahlungen umwandeln und gleichzeitig Präzisionsprobleme aufgrund von Typbeschränkungen vermeiden.

<php // Dieser Teil hat nichts mit dem Inhalt des Artikels zu tun. Sie können einen Platzhalter oder abschließende Bemerkungen "\ nend des Artikels" einstellen. ?>
 <span></span>