Php MySQL大于,带有微时间时间戳
我有一个PHP脚本在MySQL数据库中插入行。每一行都有一个字段“created_at”,该字段填充PHP函数microtime(true)的值,并以双精度插入。(微时间,因为我需要比秒更精确的东西) 我有另一个PHP脚本,它根据在字段中创建的_选择行 当我继续选择时,如下所示:Php MySQL大于,带有微时间时间戳,php,mysql,microtime,Php,Mysql,Microtime,我有一个PHP脚本在MySQL数据库中插入行。每一行都有一个字段“created_at”,该字段填充PHP函数microtime(true)的值,并以双精度插入。(微时间,因为我需要比秒更精确的东西) 我有另一个PHP脚本,它根据在字段中创建的_选择行 当我继续选择时,如下所示: 1302775523.51878处创建的'ms_voltage'中选择* 我收到一个结果集,其中第一行的值正好是创建时的值 这发生在我的PHP脚本和手动执行查询时的PhpMyAdmin中。但并非总是如此,并非所有价值观
1302775523.51878处创建的'ms_voltage'中选择*
我收到一个结果集,其中第一行的值正好是创建时的值
这发生在我的PHP脚本和手动执行查询时的PhpMyAdmin中。但并非总是如此,并非所有价值观都如此。只是偶尔,真的
这怎么可能?我没有要求大于/等于,我严格要求大于。
我是否忽略了与类型相关的内容?双精度类型仅表示近似的数字数据值。尝试使用十进制类型。双精度类型仅表示近似的数字数据值。尝试使用十进制类型。是您的列浮点吗?使用true调用microtime会给您一个浮点值,看起来像是一个浮点值,在.51878后面会有一些您看不到的数字,因此这些数字会使存储的值大于查询中的值
除非您真的需要浮点,否则我会将字符串结果转换为int,甚至是秒和秒的两列。然后,您可以在已知值上使用>或<,而不用担心浮点值的不精确性。是您的列浮点吗?使用true调用microtime会给您一个浮点值,看起来像是一个浮点值,在.51878后面会有一些您看不到的数字,因此这些数字会使存储的值大于查询中的值
除非您真的需要浮点,否则我会将字符串结果转换为int,甚至是秒和秒的两列。然后,您可以对已知值使用>或<,而不用担心浮点值的不精确性。是的,浮点运算有时可以做到这一点。要理解原因,认识到并非所有数字都能准确地以10为基数表示,也并非所有数字都能准确地以2为基数表示是很有帮助的
例如,“1/3”可以写成0.33333或0.33334。两者都不是真正的“正确”;他们是我们能做的最好的。基数10中的“DOUBLE”可能是0.3333或0.3334,这是数字的两倍,但仍然不“正确”
最好的选择是使用十进制值,或者使用整型值(将实际值乘以10000或100000,以便将您关心的十进制数字转换为该整型)。是的,浮点算术有时可以做到这一点。要理解原因,认识到并非所有数字都能准确地以10为基数表示,也并非所有数字都能准确地以2为基数表示是很有帮助的
例如,“1/3”可以写成0.33333或0.33334。两者都不是真正的“正确”;他们是我们能做的最好的。基数10中的“DOUBLE”可能是0.3333或0.3334,这是数字的两倍,但仍然不“正确”
最好的选择是使用十进制值,或者使用整型值(并将实际值乘以10000或100000,以便将您关心的十进制数字转换为该整型)。欢迎使用。我删除了你的个人便条,因为这在社区中是普遍不受欢迎的。不过没什么私事。另请参见常见问题解答。干杯谢谢@Joris Meys-没问题。欢迎来到SO。我删除了你的个人便条,因为这在社区中是普遍不受欢迎的。不过没什么私事。另请参见常见问题解答。干杯谢谢所有(非常快的)回复。我现在更了解这个问题了。我想我将转换成int来缓解任何舍入问题,这肯定会奏效。再次感谢!非常感谢所有(非常快速)的回复。我现在更了解这个问题了。我想我将转换成int来缓解任何舍入问题,这肯定会奏效。再次感谢!