bcmath a veces devuelve un resultado flotante y, a veces, redondo
Pregunta
tengo una variable $newTime
, que es el tiempo en segundos formado por mktime()
, y quiero convertirlo en número de días.
En este caso se acabó 86.400
(que es una cantidad de segundos en un día), y trato de dividirlo por 86.400
para obtener el número de días (redondeado).
Pero a veces me sale:
Case 1: 87951 / 86400 = 1.0179513888 (1 day ago)
Case 2: 156257 / 86400 = 1.8085300925 (2 days ago)
y aveces:
Case 1: 87986 / 86400 = 1 (Should be 1 day ago)
Case 2: 156292 / 86400 = 1 (Should be 2 days ago)
Este es el código:
$newTime = round(bcdiv($newTime, bcmul("24", bcmul("60", "60"))),0);
Cuando no uso bcmath, solo las matemáticas normales ($newTime / (60*60*24)
), siempre obtengo resultados flotantes.
Solución
¿Ha configurado la escala usando bcscale
?Si está configurado en 0
, podría explicar el comportamiento.Por favor, intenta llamar bcscale(100)
antes de su cómputo;
Otros consejos
Podrías usar:
$newTime = round( $newTime / (60 * 60 * 24));
Sin nada de nada, por favor.
Ejemplos:
$newTime = 156292;
$newTime = round( $newTime / (60 * 60 * 24));
echo $newTime; //2 Always
$newTime = 87986;
$newTime = round( $newTime / (60 * 60 * 24));
echo $newTime; //1 Always
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow