with round redondear quitar numerico hacia float enteros decimals decimales convertir arriba php floating divide

round - redondear enteros php



¿Cómo obtengo un valor flotante al dividir dos enteros?(PHP) (4)

En circunstancias normales, su código debe devolver el valor flotante 0.923076 ...

La razón por la que obtienes un entero redondeado podría deberse a que tienes la ini setting para "precision" establecida en 0 , para corregir esto, o bien edita tu php.ini o usa ini_set("precision", 3); en su código antes del cálculo.

Otra forma de solucionar esto es usar BCmath :

echo $value=bcdiv($a, $b, 3);

Y, sin embargo, otra forma sin usar ninguna extensión es usar un pequeño truco matemático multiplicando el valor que quieres dividir por 1000 para obtener 3 decimals .
De esta manera, dividirá 12000 por 13 y la parte entera será 923 , luego, ya que multiplicó por 1e3, inserte una coma / punto antes de los últimos 3 lugares.

function divideFloat($a, $b, $precision=3) { $a*=pow(10, $precision); $result=(int)($a / $b); if (strlen($result)==$precision) return ''0.'' . $result; else return preg_replace(''/(/d{'' . $precision . ''})$/'', ''./1'', $result); }

echo divideFloat($a, $b); // 0.923

Hola, estoy tratando de dividir dos enteros, por ejemplo, 12/13, pero siempre obtengo un entero entero 1, no un número decimal.

Intenté escribir los valores para flotar de antemano sin éxito.

Básicamente todo lo que quiero es un resultado decimal como: 0.923 ...

$x = 12; $y = 13; echo $value = $x / $y; //Would like to see 0.923 not 1


Simplemente use $ value = (float) ($ x / $ y); // El resultado estará en flotación.

¡Aclamaciones!


Todas las demás respuestas NO SON CORRECTAS, porque la división de PHP siempre devolverá valores flotantes, como se indica claramente en el manual oficial PHP: Operadores aritméticos , excepto en los casos en que dos operandos son enteros que pueden dividirse de manera uniforme.

De hecho, la pregunta es incorrecta: el código debe producir 0.923 ..., como se esperaba del interrogador.

Sarcásticamente, la respuesta rechazada (proveniente de @ BulletProof47) es la única que NO ES INCORRECTA (pero tampoco tiene sentido). Quién sabe lo que estaba pensando, pero apuesto a que todos saben por qué fue rechazado: D

En caso de que esté interesado, la función subyacente que realiza la división en php es div_function , ubicada en Zend/zend_operators.c , que se muestra a continuación:

ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */ { zval op1_copy, op2_copy; int converted = 0; while (1) { switch (TYPE_PAIR(Z_TYPE_P(op1), Z_TYPE_P(op2))) { case TYPE_PAIR(IS_LONG, IS_LONG): if (Z_LVAL_P(op2) == 0) { zend_error(E_WARNING, "Division by zero"); ZVAL_BOOL(result, 0); return FAILURE; /* division by zero */ } else if (Z_LVAL_P(op2) == -1 && Z_LVAL_P(op1) == LONG_MIN) { /* Prevent overflow error/crash */ ZVAL_DOUBLE(result, (double) LONG_MIN / -1); return SUCCESS; } if (Z_LVAL_P(op1) % Z_LVAL_P(op2) == 0) { /* integer */ ZVAL_LONG(result, Z_LVAL_P(op1) / Z_LVAL_P(op2)); } else { ZVAL_DOUBLE(result, ((double) Z_LVAL_P(op1)) / Z_LVAL_P(op2)); } return SUCCESS; ...


echo $value = $x / (float) $y;

Si emite la variable $y como flotante, el intérprete usa la división de punto flotante en lugar de la división entera.

porque es una suposición predeterminada utilizar la división de enteros en dos variables de enteros.

Fue diferente si usó $y = 13.0 (una variable flotante como denominador): los resultados son siempre un número flotante