English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Texto
Recientemente, al trabajar en un problema de suma y resta de decimales, se produjo un problema de precisión de flotante. Parece que la afirmación de que los lenguajes interpretados tienen problemas con las operaciones de flotante es cierta.
Primero veamos un fragmento de código:63< ;php1$b = 0. $a = 0.7$b = 0. ; + ;var_dump(($a8);
El valor impreso es booleano falso
¿Por qué esto?63;La guía de PHP para números flotantes tiene la siguiente advertencia:
Advertencia
Precisión de flotante
Obviamente, las fracciones decimales simples como 0.1 o 0.7 No se puede convertir a un formato binario interno sin perder un poco de precisión. Esto causará resultados confusos: por ejemplo, floor((0.1+0.7)*10) generalmente devuelve 7 que a la esperada 8,ya que la representación interna del resultado es más bien similar 7.9999999999...。
Esto tiene que ver con el hecho de que no es posible expresar ciertas fracciones decimales con un número finito de dígitos. Por ejemplo, el decimal 1/3 Se convirtió en 0.3333333. . .。
Por lo tanto, nunca crean que los resultados de los números flotantes son precisos hasta el último dígito, y nunca comparan dos números flotantes para ver si son iguales. Si realmente necesitan una mayor precisión, deben usar funciones matemáticas de precisión arbitraria o funciones gmp
Entonces, deberíamos modificar la expresión anterior como<?php$a = 0.17;var_dump(bcadd($a,$b,2) == 0.8); Esto resolverá el problema de cálculo de números flotantes
Aquí termina todo el contenido que el editor les ha traído sobre la solución del problema de precisión de flotante en PHP, esperamos que todos nos apoyen y griten tutorial~