截断数字的最后X位数而不除以10eX

时间:2013-04-17 18:30:14

标签: php time blocking usleep

我正在制作一个阻塞算法,我只是意识到如果它应该保持精确,那么为这样的算法添加超时就不那么容易了。
添加超时意味着阻塞算法应该在X ms之后中止,如果不是更早的话。现在我似乎有两个选择:

  1. 迭代时间(有错,但很快)
    • 检查阻止条件
    • time_elapsed迭代1(使用usleep表示1e-6秒)
    • time_elapsedtimeout进行比较。 (这是我将讨论的问题
    • usleep(1)
  2. 每次迭代获取系统时间(慢但精确)
    • 知道如何操作,请不要发布任何有关此问题的答案。
  3. 使用timeout

    评估time_elapsed

    这就是困扰我的事情。 timeout将以毫秒(10e-3)为单位,而usleep将以10秒-6秒的速度休眠。因此,我的time_elapsed将比timeout精确1000倍。我希望截断 time_elapsed的最后三位数(操作等于floor($time_elapsed/1000)而不将其除以。分区算法太慢。

    摘要

    我希望将我的变量缩小1000倍而不将其除以1000.我想要摆脱数据。在二进制中我会使用位移运算符,但不知道如何在十进制系统上应用它。

    代码示例:

    有时,当SO上的人无法回答理论问题时,他们真的渴望代码。这是:

    floor($time_elapsed/1000);
    

    我希望用更快的代码替换这段代码。请注意,虽然问题本身充满了超时,但问题标题仅限截断该数据。其他用户可能会发现该解决方案可用于除计时之外的其他目的。

2 个答案:

答案 0 :(得分:0)

也许这会对Php number format有所帮助。虽然这确实会导致舍入,但如果这是不可接受的,那么我认为它不可能,因为PHP是松散类型的,你不能用特定的精度来定义数字。

答案 1 :(得分:0)

试试这个:

(int)($time_elapsed*0.001)

这应该快得多