Simple matemática con decimales en PHP

¡Esto me está matando! Nunca he tenido tantos problemas y no puedo entender lo que estoy haciendo mal aquí.

Si tengo un número, digamos 2.32, y quiero hacer matemáticas con él, no funcionará. El ejemplo más simple:

$income = $commission; //Commission is 2.32, retrieved from XML echo "income: $income
"; $income100 = $income*100; echo "income100: $income100
";

El resultado que obtengo es:

 income: 2.32 income100: 200 

¿Cómo puedo usar un número decimal con precisión sin modificarlo?

¡Muchas gracias!

Debe asignar $income de la siguiente manera para deshacerse del SimpleXMLElement subyacente:

 $income = (float) $commission; 

Ejemplo de lo que sucede cuando no :

 $x = simplexml_load_string("2.4"); echo $x * 100; // output: 200 

Además de usar flotadores como dijo Tim, también asegúrese de usar las funciones BC Math cuando realice operaciones aritméticas en números de coma flotante. Específicamente bcmul () :

$income100 = bcmul($income, 100);

El problema con los números de coma flotante es que no puede representar números decimales con ellos (a menos que se pueda escribir como a/b para el entero a y b , e incluso solo si abs(a) < pow(2,52) b es un poder de 2).

Tal vez sea mejor que uses las funciones de cadena para obtener un valor entero:

 $tmp = explode(".",$commission); $tmp = intval($tmp[0].str_pad(substr($tmp[1],0,2),2,"0")); 

Esto dividirá la parte entera de la parte decimal, asegurará que la parte decima tenga dos dígitos de longitud y la empujará al final de la parte entera, lo que multiplicará efectivamente el número original por 100.

Creo que la solución más fácil sería convertirlo en un flotador con floatval ()

$income = floatval($comission)

deje el rest del código como está y debería funcionar como se esperaba.