bcmath有时返回浮点值,有时返回舍入结果


bcmath sometimes returns float, and sometimes round result

我有一个变量$newTime,它是由mktime()生成的以秒为单位的时间,我想将其转换为天数。

在这种情况下,它超过了86.400(这是一天中的秒数),我试图将它除以86.400,得到天数(四舍五入)。

但有时我会得到:

Case 1: 87951 / 86400 = 1.0179513888 (1 day ago)
Case 2: 156257 / 86400 = 1.8085300925 (2 days ago)

有时:

Case 1: 87986 / 86400 = 1 (Should be 1 day ago)
Case 2: 156292 / 86400 = 1 (Should be 2 days ago)

这是代码:

$newTime = round(bcdiv($newTime, bcmul("24", bcmul("60", "60"))),0);

当我不使用bcmath,只使用正则数学($newTime / (60*60*24))时,我每次都会得到浮动结果。

您是否使用bcscale设置了刻度?如果它被设置为0,它可以解释这种行为。请在计算之前尝试调用bcscale(100)

您可以使用:

$newTime = round( $newTime / (60 * 60 * 24));

请不要任何bcmath。

示例:

$newTime = 156292;
$newTime = round( $newTime / (60 * 60 * 24));
echo $newTime; //2 Always
$newTime = 87986;
$newTime = round( $newTime / (60 * 60 * 24));
echo $newTime; //1 Always