Maison > Article > développement back-end > Questions sur les opérations à virgule flottante PHP et js
0,1 + 0,2 Pourquoi n'est-il pas égal à 0,3 ? (Résultat correct : 0,30000000000000004)
0,8 * 7 Pourquoi n'est-il pas égal à 5,6 (Résultat correct : 5,6000000000000005)
var_dump(intval(0.58 * 100));
Le résultat correct est 57, pas 58
En fait, ces résultats ne sont pas bogues de langage, mais sont liés au langage. Concernant le principe d'implémentation, tous les nombres dans js sont unifiés en tant que Nombre, y compris les entiers, qui sont en fait tous des types doubles.
Et PHP fera la distinction entre int et float. Quelle que soit la langue, tant que des opérations en virgule flottante sont impliquées, il existe des problèmes similaires, vous devez donc y prêter attention lorsque vous les utilisez.
Selon la norme internationale IEEE 754, tout nombre binaire à virgule flottante V peut être exprimé sous la forme suivante :
V = (-1)s * M * E 1. (-1)s 表示符号位,当s=0,V为正数;当s=1,V为负数。 2. M表示有效数字,大于等于1,小于2。 3. 2E 表示指数位。
Par exemple : décimal -5,0, écrit en binaire est -101,0, ce qui équivaut à -1,01×22. Alors, s=1, M=1,01, E=2.
IEEE 754 stipule que pour un nombre à virgule flottante de 32 bits, le bit le plus élevé est le bit de signe s, les 8 bits suivants sont l'exposant E et les 23 bits restants sont le chiffre significatif M.
Pour un nombre à virgule flottante de 64 bits, le bit le plus élevé est le bit de signe S, les 11 bits suivants sont l'exposant E et les 52 bits restants sont le chiffre significatif M.
IEEE 754 comporte des dispositions spéciales pour le chiffre significatif M et l'exposant E.
Comme mentionné précédemment, 1≤M490f01de293ed30456b9eb196fdfbf26
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!