Position actuelle: Accueil> Derniers articles> Comment éviter la perte de précision lors de la conversion lors de l'utilisation de la fonction Bindec?

Comment éviter la perte de précision lors de la conversion lors de l'utilisation de la fonction Bindec?

gitbox 2025-09-17
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie n&#39;a rien à voir avec le contenu de l&#39;article,Vous pouvez mettre du code de test ou du contenu d&#39;espace réservé</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue à lire cet article\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"># utiliser bindec Heure de fonction,Comment éviter la perte de précision pendant la conversion?</span></span><span>

exister PHP milieu,`bindec` Les fonctions peuvent convertir les chaînes binaires en nombres décimaux。Par exemple:

```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">// Sortir 13</span></span><span>
</span></span>

Bien que Bindec soit très pratique lorsque vous traitez des nombres binaires courts, vous pouvez rencontrer des problèmes de perte de précision lorsque vous traitez des nombres binaires plus importants. En effet, le type entier de PHP et le type de point flottant ont des limitations de taille lorsqu'ils sont stockés en interne. Habituellement, la valeur maximale des entiers PHP sur les systèmes 64 bits est de 9223372036854775807. Le dépassement de cette plage sera automatiquement converti en numéros de points flottants, entraînant une perte de précision.

Méthodes pour éviter la perte de précision

1. Utilisez des extensions GMP

GMP (GNU multiple précision) fournit des calculs entiers de haute précision, qui peuvent gérer en toute sécurité les chaînes binaires de toute longueur:

 <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">// Convertir le binaire en GMP Objet</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">// Sortir十进制字符串</span></span><span>
</span></span>

De cette façon, même si le numéro binaire est très important, la précision ne sera pas perdue.

2. Utilisez une extension bcmath

BCMATH fournit des calculs numériques de chaîne de haute précision, qui peuvent également être utilisés pour traiter de grands nombres binaires:

 <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">// Sortir十进制字符串</span></span><span>
</span></span>

Bien que BCMATH ne soit pas aussi direct que GMP, il peut également être utilisé sans extensions GMP.

3. Résumé

  • Pour les petits nombres binaires, il suffit d'utiliser Bindec directement.

  • Pour les grands nombres binaires ou les calculs de haute précision, il est recommandé d'utiliser des extensions GMP ou BCMATH.

  • Évitez de compter sur les numéros de points flottants pour stocker de grands entiers pour éviter la perte de précision.

Avec la méthode ci-dessus, vous pouvez convertir en toute sécurité les chaînes binaires en décimal en PHP tout en évitant les problèmes de précision en raison des limitations de type.

<? Php // Cette partie n'a rien à voir avec le contenu de l'article. Vous pouvez mettre un espace réservé ou des remarques finales écho "\ nend de l'article."; ?>
 <span></span>