Problemas con number_format

Tengo el siguiente código en php:
<?PHP
   $a=9144.6;
   echo number_format($a,2);
   echo "<br>";
   $b=number_format($a,2)+1;
   echo "<br>";
   echo $b;
   ?>
Al mostrar el valor de la variable $b sale 10, ¿por qué? Debería salir 9145, puesto que le estoy sumando 1 a la variable $a. Más que solucionarlo (que se resolvería sumando $a+$b) quisiera saber porque sale 10.

3 respuestas

Respuesta
1
La respuesta es (más o menos) sencilla;
Number_format retorna una string separando los miles con un símbolo (por defecto es ",") y los decimales con otro "."; de ahí la string "9,144.60" del primer echo en tu ejemplo.
Tu asignación de la variable $b es equivalente a esto:
$b = "9,144.60" + 1
En el momento que intentas hacer una suma, PHP va a intentar convertir la cadena en un número, con una característica del lenguaje que se llama Type Juggling. Como la "," no es un carácter válido en una variable numérica, PHP deja de convertir ahí y se queda con lo que haya leído hasta el momento... así que internamente lo que termina haciendo es:
$b = "9,144.60" + 1 ==>  9 + 1  ==> 10
En la documentación de PHP hay una respuesta mucho más elaborada a esta misma duda:
String conversion to numbers (mira los últimos ejemplos)
Respuesta
1
Bien al darle formato con el number_format lo que hace es ponértelo de este modo pero en formato string no number, y al sumarle uno coge el formato string 9,144.6 y usa la, como primer marcador de decimal por eso al sumar 1 te da 10 porque le suma 9.1446 aunque lo del punto sinceramente no se si lo ignora.
Respuesta
1
Realiza la suma antes del number_format. Estás utilizando una forma de usar los decimales que no respeta el "." de separación:
http://php.net/manual/es/function.number-format.php

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas