Establecer precisión para un número flotante en PHP

Obtengo un número de la base de datos y este número puede ser float o int .

Necesito establecer la precisión decimal del número en 3 , lo que hace que el número no sea más largo que (con respecto a los decimales) 5.020 o 1518845.756 .

Usando PHP

 round($number, $precision) 

Veo un problema:

Redondea el número. Necesito una función para cortar solo los decimales, sin cambiar sus valores, que round( ) parece no seguir.

Puede usar number_format() para lograr esto:

 echo number_format((float) $number, $precision, '.', ''); 

Esto convertiría 1518845.756789 a 1518845.757 .

Pero si solo quiere cortar la cantidad de decimales cortos a 3, y no redondear , entonces puede hacer lo siguiente:

 $number = intval($number * ($p = pow(10, $precision))) / $p; 

Puede parecer intimidante al principio, pero el concepto es realmente simple. Usted tiene un número, lo multiplica por 10 3 (se convierte en 1518845756.789 ), lo convierte en un número entero, de modo que todo después de los 3 lugares decimales se elimina (se convierte en 1518845756 ), y luego divide el resultado por 10 3 (se convierte en 1518845.756 ).

Manifestación

Suena como floor con decimales. Entonces puedes probar algo como

 floor($number*1000)/1000 

Si entiendo correctamente, no desearía que ocurriera el redondeo y querría que la precisión fuera 3.

Entonces la idea es usar number_format() para una precisión de 4 y luego eliminar el último dígito:

 $number = '1518845.756789'; $precision = 3; echo substr(number_format($number, $precision+1, '.', ''), 0, -1); 

Mostrará:

 1518845.756 

más bien que:

 1518845.757 

Enlaces: number_format() , substr()