php内置函数microtime(true)后面的微妙数可能为空吗

zx32342342 发布于 2013/08/07 15:51
阅读 1K+
收藏 0
PHP

如下代码, 生成唯一id

substr(strtr(microtime(true), array('.'=>'')),1, 10) . str_pad($uid, 9, '0', STR_PAD_LEFT);

程序运行1年多, 发现有6000+个18位的id, 只能怀疑到是这里的问题了, 因为18位的id, 是中间少了个0导致的

加载中
0
hylent
hylent

microtime(true) 返回的是float类型 实际上由于整数部分比较大 所以小数部分只有4位 这样的话 就有一定的概率出现这样的情况 小数位都是0 而php的float 转为string 的内部机制是 如果小数位都是0 那就去掉小数位和小数点 所以你的情况就出现了

不过 如果按照概率算的话 你出现这样情况的概率应该是万分之一的 这样的话 莫非你的数据是千万级的??

z
zx32342342
明白了,类型问题,数据量还没到千万那么高,不过这6k多的18位,是2年多积攒下来的
0
南湖船老大
南湖船老大
明显是测试不充分,不过这些细节很少人会想到
z
zx32342342
惭愧啊
返回顶部
顶部