【问题标题】:bcmath sometimes returns float, and sometimes round resultbcmath 有时返回浮点数,有时返回舍入结果
【发布时间】:2012-07-26 22:40:45
【问题描述】:

我有一个变量$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)),我每次都会得到浮动结果。

【问题讨论】:

  • 那么...如果没有它也能正常工作,为什么还需要使用 bcmath?
  • 嗯,是的,但它现在困扰着我,因为它不适用于 bcmath...

标签: php bcmath


【解决方案1】:

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

【讨论】:

  • 您还可以使用bcmath.scale INI 选项检查/更改默认比例。
【解决方案2】:

你可以使用:

$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

【讨论】:

  • 我已经说过我尝试了正则数学,没关系,但我仍然对 bcmath 解决方案感兴趣:)
  • 无论如何,您都需要将字符串结果从bcmath 转换为普通数字,才能使用round。所以使用它没有任何意义
  • 使用round(bcdiv($newTime, bcmul("24", bcmul("60", "60"))))时,不需要任何其他转换
  • round 将参数转换为数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
  • 2016-05-27
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
相关资源
最近更新 更多